Comprehensive Learner Record Standard Version 2.0 | IMS Global Learning Consortium
You are here
Specifications
Comprehensive Learner Record Standard™
Comprehensive Learner Record Standard Version 2.0
Abstract
The Comprehensive Learner Record (CLR) Standard has been designed to create,
transmit, and render an individual's set of achievements, as issued by multiple learning
providers, in a machine-readable format that can be curated into verifiable digital
records of achievement.
1.
Overview
This section is non-normative.
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 CLR Standard (Comprehensive Learner Record Standard) has several related documents and artifacts shown below. Together
they make up the specification.
Comprehensive Learner Record Standard v2.0
([
CLR-20
]) - The main CLR Standard 2.0 specification document.
Open Badges Implementation Guide v3.0
([
OB-IMPL-30
]) - Provides information to lead you to successful implementation and certification of the Comprehensive Learner Record 2.0 specification.
Comprehensive Learner Record Standard Conformance and Certification Guide v2.0
([
CLR-CERT-20
]) - Specifies the conformance tests and certification requirements for this standard.
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
The context file is available at:
1.2.3
JSON Schema
All JSON Schema can be found in
E.2
JSON Schema
. JSON Schema files for credentials and API schema verification are available online:
ClrCredential JSON schema
AchievementCredential JSON schema
EndorsementCredential JSON schema
GetClrCredentialsResponse 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:
ClrCredential 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 $[object Object].
An implementation of this specification that fails to implement a MUST/REQUIRED/SHALL requirement or fails to abide by a MUST NOT/SHALL NOT prohibition is considered nonconformant. SHOULD/SHOULD NOT/RECOMMENDED statements constitute a best practice. Ignoring a best practice does not violate conformance but a decision to disregard such guidance should be carefully considered. MAY/OPTIONAL statements indicate that implementers are entirely free to choose whether or not to implement the option.
The 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.
Association
: An association is the relationship between one assertion in a CLR has with another assertion in that CLR.
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
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. [
VC-DATA-MODEL-2.0
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
Digital Credential Achievement
(DC Achievement): This is the content description of a credential that an assertion references. It contains metadata such as the name of the achievement, description, alignment of skills, etc. An Open Badge asserts a single achievement. A CLR asserts a collection of assertions, each of which asserts a single achievement.
Digital Credential Assertion
(DC Assertion): The core of both Open Badges and CLR is the assertion about achievement(s). DC Assertion properties are specific to one learner's achievement and specify metadata such as issuer, date of achievement, expiration data, as well as results and evidence that support the assertion. A Verifiable Credential more broadly asserts a claim about a Credential Subject which can be applied to education and occupational achievements.
Evidence
: Information supporting a claim such as a URL to an artifact produced by the Learner.
Issuer
: A role an entity can perform by asserting
claims
about one or more
subjects
, creating a
verifiable credential
from these claims, and transmitting the
verifiable credential
Learner
: The person who is the subject of the CLR and assertions contained in a CLR.
Open 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. [
VC-DATA-MODEL-2.0
Publisher
: The organization or entity issuing the CLR (typically the educational institution or a 3rd-party agent). The publisher is either the issuer or has a trusted relationship with the issuer of all the assertions in the CLR.
Relying Third-Party
: Also referred to as the "verifier" of a VC. This entity requests, verifies, and may consume data being presented.
REST API
: A style of web API (Application Programming Interface) loosely based on HTTP methods (DELETE, GET, POST, and PUT) to access resources (e.g. CLRs) via a URL.
Result
: Describes a possible achievement result. A result may contain the rubric level that was achieved.
Result Description
: Describes a possible achievement result. A result description may contain a rubric.
Rich Skill Descriptor
(RSD): A machine readable reference to a description of a skill located at a unique URL. [
RSD
Role
: People have roles in organizations for specific periods of time. Roles are a time aware association between a person and an organization. [
CEDS
Rubric
: Defines levels associated with the achievement definition (e.g. "approaches", "meets", and "exceeds").
Server
: In a
REST API
, the server is the actor that responds to a DELETE, GET, or POST request. Also called a Platform in the
IMS Global Security Framework v1.1
Skill Assertion
: An assertion that contains a "skill result."
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 CLR concepts and the relationship between those concepts. The data model in appendix
B.4
Shared 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. Associations). Please see
1.4
Terminology
for definitions of the concepts.
Starting with this version of the CLR Standard, a CLR 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 CLR terminology (e.g. Publisher is identified by the VC "issuer").
I,
Publisher
assert a
Claim
about this
Credential Subject
The claim provides the identity of the publisher, issuance date, and instructions on how to cryptographically prove the publisher identity and that the assertion and claim contents have not been tampered with since issuance.
The claim must describe a single credential subject which identifies the recipient of the
CLR
as the learner.
The claim must also contain a packaged set of assertions where each assertion is a
DC Assertion
with a definition shared by the [
OB-30
] and [
CLR-20
] standards. The issuer of each assertion may or may not be the same entity as the publisher. The recipient of each assertion must be the
Learner
even if the issuer uses a different identification for the learner. The publisher claims that this packaged set of assertions represents the publisher’s complete CLR for the learner at the time of issuance.
The claim may also contain a packaged set of
DC Achievements
which the publisher claims to represent a complete set of achievements that may be asserted by issuers about the learner at some time in the future.
The claim may also contain
Associations
between assertions in the CLR.
2.
Use Cases
This section is non-normative.
The use cases below drive the design of the CLR Standard v2.0.
2.1
Categories
The use cases are tagged with the following categories.
Higher Education
These use cases involve transcripts and proof of degrees, continuing and profession education, and co-curricular activities in higher education.
K12
These use cases involve transcripts and co-curricular activities in primary and secondary education.
Employment
These use cases involve employers, job applicants, and LERs (Learning and Employment Records).
Training Providers
These use cases involve community colleges, technical high schools, MOOC (Massive Open Online Course) providers, and training providers such as CompTIA (the Computing Technology Industry Association), CDL (Commerical Drivers License) training providers, and OSHA (Occupational Safety and Health Administration) training providers.
Licensing and Regulatory Affairs
These use cases involve licensing and regulatory affairs, and state or federal licensing boards such as CDL issuers, CNA (Certified Nursing Assistant) issuers, workforce development organization, candidate coaching organizations, and government licensure orgs.
Military
These use cases involve training provided by a military organization, and career services provided by the military such as MilGears.
Professional Organization
These use cases involve training provided by professional organizations such as trade associations including the National Trade Association, BBB (Better Business Bureau), and SAG-AFTRA (Screen Actors Guild - American Federation of Television and Radio Artists).
2.2
Recent graduate wants to hold a copy of their own official transcript
Categories
Higher Ed
K12
Samuel is a recent graduate of Atlas University. They majored in Mechanical Engineering and received a BSE Degree. Samuel requests an official diploma and transcript issued by Atlas University to store in their VC-compatible Wallet. Samuel requests the transcript from the Registrar's Office. The Registrar issues the transcript as a CLR Verifiable Credential (CLR VC) and notifies Samuel to accept the CLR into their wallet. The CLR VC includes several Assertions including the BSE Degree and Course completions.
Goal of the Primary Actor
: Samuel's goal is to hold their BSE Degree and transcript to share directly with employers or other institutions that require and need to verify their degree and/or transcript.
Preconditions for this Use Case
Altas University has implemented the CLR VC specification and been authorized to publish credentials.
Samuel has created a wallet supported by the CLR VC publisher and registered it with Altas (email address or other identifier).
Flow of Events
Samuel requests the credentials be issued by Atlas University.
Atlas issues the credentials to a known wallet user Samuel has registered.
Samuel receives a notification that a credential has been issued.
Samuel logs into his wallet and is prompted to accept the credential.
Post-Conditions/Success Criteria
Samuel holds his credentials on one or more wallets (web app, mobile app) and when is asked to provide any of his credentials, they are able to securely share the credential(s) through an email invitation or a direct transfer of the CLR to the validators (institution or employer) system by scanning a QR code provided by the validator and approving the credential be sent.
The credential received by the validator is validated using W3C VC and the credential(s) are accepted.
Points of Failure
CLR Publishing Engine.
Wallet availability.
Variations
Samuel is a recent graduate of a high school and received a diploma and transcript.
The official transcript Includes the BSE Degree and Course completions with evidence demonstrating their knowledge of concepts, and co-curricular Assertion VCs issued by Atlas University partners.
The official transcript contains pointer data toward course-related metadata such as the syllabus.
2.3
Job applicant provides proof of degree and transcript to potential employer
Categories
Higher Ed
Employment
Samuel wants to apply for a job opening at ACME Company. The job description requires proof of a degree in Mechanical Engineering and prefers that candidates provide a complete transcript. ACME Company will accept a Verifiable Presentation as evidence to accompany the job application. Samuel holds a CLR that bundles together their BSE Degree assertion and the assertions recognizing courses completed with relevant evidence. Using their wallet, Samuel creates a Verifiable Presentation that includes the Transcript CLR and attaches the VP to their job application. Horace, in HR at ACME Company uses the VP proof to verify that the VP was not corrupted, and the VC proofs to verify that the data issued by Atlas University was not corrupted as a complete transcript of Samuel's achievements at the school.
Goal of the Primary Actor
: Samuel wants to prove that they have met the degree requirements for a position.
Actors
Samuel, a college graduate and job applicant.
Horace, HR staff at ACME Company.
Preconditions for this Use Case
Samuel holds a CLR including their degree assertion and the full transcript of assertions they received from their university for course completions, competencies, and extracurriculars.
Samuel has a VC wallet capable of presenting the CLR VC as a Verifiable Presentation.
ACME Company has verifier software that can verify the VP and unpack the CLR schema and perform additional verification of each assertion it contains. This software, or its human operator, can identify the degree assertion from among the set, verify that it meets their needs, and can view and understand the other assertions included in the CLR.
Flow of Events
Samuel receives a request from ACME Company to present their credentials.
Samuel selects the CLR credential as responsive to the request.
The wallet uses Samuel's cryptographic key information to sign a VP containing the CLR VC.
The VP is transmitted to ACME Company in response to the request.
ACME's verifier software verifies the authenticity of the CLR VC, and further unpacks the individual assertions, verifying each.
The software presents the list of assertion credentials to Horace to review.
Horace confirms that the issuer is as expected, all relevant credentials are valid, and that the degree assertion is present and meets expectations. He reviews the list of courses, competencies, and extracurriculars and finds that Samuel is a well-experienced candidate.
Post-Conditions/Success Criteria
The CLR is successfully transferred to the verifier, who has verified not only the validity of the outer layer, but also of each assertion contained within.
Points of Failure
ACME's verifier and Samuel's wallet must be able to negotiate a credential request (or through some other mechanism determine how the VP should be delivered to verifier).
Samuel must be able to select the CLR credential in response to the credential request.
ACME's verifier software must be able to verify the signatures created through the mechanism chosen for the VP and the VC it contains.
ACME's verifier software must be CLR-aware, capable of unpacking and verifying the individual assertions within the CLR schema.
ACME must be able to verify that the issuer (university) is authentic.
Variations
Samuel initiates the flow by generating a VP from their wallet and transmitting it to the verifier (either through an upload form, or by email).
2.4
Job applicant provides proof of degree and specific courses/engagements from the CLR
Categories
Higher Ed
Employment
Monique wishes to apply for a job opening at CHEM pharmaceutical Company. The job description requires proof of a degree in Chemistry and successful completion of Organic Chemistry class. The student possesses their institutionally issued CLR, but wishes to submit only the Degree and the Organic Chemistry courses to the CHEM company. Using their wallet, Monique creates a CLR Verifiable Presentation that pulls the Attested Degree and Courses from their CLR transcript. Harry, in HR at CHEM Company uses the VP proof to verify that the VP was not corrupted, and the VC proofs to verify that the data issued by the institution was not corrupted. There is an indicator on the CLR to let Harry know 1) the publisher was the student, 2) the record asserted was not the entire institutional transcript, and 3) the authority behind the degree is the institution, but the authority behind the assessment in the course in the College of Arts and Sciences.
Goal of the Primary Actor
: Monique wishes to apply for a job opening at CHEM pharmaceutical Company.
Actors
Monique, Job applicant.
Harry, HR professional.
Preconditions for this Use Case
Student possesses their institutionally issued CLR (Complete Transcript).
CLR includes the Attested Degree and Courses.
CLR indicates to the verifier (employer) that the publisher was the student, the record asserted was not the entire institutional transcript, and that the authority behind the degree is the institution, but the authority behind the assessment in the course in the College of Arts and Sciences.
Student has a digital wallet or other method of curation and sharing.
Student can submit a subset of their credentials (only proof of Degree and completion of Organic Chemistry courses to the CHEM company).
Flow of Events
Monique applies using her institutionally issued CLR and a digital wallet to curate and share only the two required verifiable credentials in a VP.
HR verifies the VP proof to verify that the VP was not corrupted, and the VC proofs to verify that the data issued by the institution was not corrupted and see that the CLR's publisher was the student (self asserted) and the record being asserted is not the entire institutional transcript but proof of a degree and of a single course completion.
Post-Conditions/Success Criteria
HR verifies the VP proof to verify that the VP was not corrupted, and the VC proofs to verify that the data issued by the institution was not corrupted and see that the CLR's publisher was the student (self asserted) and the record being asserted is not the entire institutional transcript but proof of a degree and of a single course completion.
HR sees that the authority behind the degree is the institution and the authority behind the assessment in the course in the College of Arts and Sciences.
2.5
Higher Ed Competency-Based Education
Categories
Higher Ed
Training Providers
As a learner, I would like recognition and verification of all the credentials I acquired within the certificate, micro-credential, or degree program I attended, covering both academic and experiential learning activities I was involved in. The credentials would include the set of skills I acquired related to the degree or the certificate program I completed, the learning experiences I completed, along with the assessments carried out during my learning. The work I created for those assessments, and results of the assessments with scale and success level information should be included as evidence of my learning and skills. These achievements should be transferable so that I can continue to add upon these in my lifelong learning and be accepted by employers as proof of employability.
Goal of the Primary Actor
: Learner wants to have skills-enhanced credentials that specify assessment approaches - from their academic as well as extracurricular/experiential learning represented in their CLR so they can best represent their abilities.
Actors
Learner.
Issuer.
Employer.
Training Provider.
Preconditions for this Use Case
Issuer is using digital credentials that are at least OB2 compliant and making use of Earning Criteria and Alignment properties (BadgeClass/Achievement) and Evidence class and other properties that individually cover assessment work product, including experiential learning work products versus typical objective/performance assessment result.
Or Issuer is on a path to do so.
Flow of Events
Issuer designs, develops and launches degree and non-degree offerings based on market relevance and skills most sought by employers.
Issuer creates and issues skills-aligned digital badges (or OB assertions within CLR assertion) for targeted achievements within the aforementioned degree and non-degree offerings.
Learner receives and can share CLR, which includes all earned digital credentials and a full listing of market relevant skills for each.
Post-Conditions/Success Criteria
Learner has a full record of their earned credentials with full listings of relevant skills, assessment methods, and evidence/work product (if relevant) underlying each. Potential employers and partner academic institutions can receive this same information in a CLR (web page or document) or as structured data that their internal systems can consume to support hiring efforts or admissions/articulation, respectively.
Points of Failure
Less related to technical solution, but robust coverage of assessment methods and evidence/work product per earned credential is a large commitment to Issuers operating at scale. Other failure point - if work product URL is tied to to 3rd party tool (like online portfolio), that link must persist as a dependency. Use case also calls for Issuer verification of experiential learning achievements, which can be logistically challenging when operating at scale.
2.6
Issuer Asserting All Student Achievements Comprehensively as a CLR
Categories
Higher Ed
K12
As an Issuer, I need to make a single, bulk CLR assertion for a student's full academic record with my institution. This may include degree completion and any underlying or related credentials such as courses, certificates, competencies, etc.
Goal of the Primary Actor
: Assert/confer a full record for a student who has completed their program of study. Full manifest, similar to final academic transcript but also including complementary achievements that don't appear on the transcript, such as badges, competencies and skills.
Actors
Issuing organizations.
Preconditions for this Use Case
Learner holds a wallet that can accept CLR credentials.
Institution has implemented the CLR VC specification to publish credentials.
Flow of Events
Student completes program of study.
Issuer assets all academic achievements for this learner via a comprehensive CLR assertion.
Consuming system, such as LER, represents all achievements in comprehensive assertion in student's learner record.
Student makes achievements in record discoverable/shares.
Hiring managers with relevant needs discover student based on their comprehensive achievement data.
Post-Conditions/Success Criteria
All achievements in CLR assertion processed, ingested, and presentable in LER interfaces.
Points of Failure
Duplicate assertions of individual achievements, revocation.
2.7
Issuer Asserting Partial Transcript at Intermediate Points in Learning Journey
Categories
Higher Ed
K12
As an Issuer that operates under a more traditional semester or term model, I need to make batch-level CLR assertions per student at the end of each semester/term to augment their record with their semester/term achievements. I will make similar assertions at the end of each semester/term until the student completes their program of study.
Goal of the Primary Actor
: Update Learning and Employment Record in batches tied to my semester/term schedule.
Actors
Issuing organizations.
Preconditions for this Use Case
Learner holds a wallet that can accept CLR credentials.
Institution has implemented the CLR VC specification to publish credentials.
Flow of Events
Learner is enrolled in multiple courses and earns achievements within them (i.e., competency-level) and at their completion.
Issuer makes CLR assertion at the end of each semester/term for each learner - can consist of multiple levels of achievement including course completion and related/child achievements like certificates earned, competencies mastered.
Learner wallet system for a student receives semester/term assertion and displays achievements to the student.
Post-Conditions/Success Criteria
All achievements in CLR assertion processed, ingested, and presentable in LER interfaces.
Subsequent assertions (for later terms) augment the record accordingly.
Points of Failure
Duplicate assertions of individual achievements, revocation.
2.8
Issuer Asserting Student Up to Date Partial Transcript of Achievements as CLR on Request
Categories
Higher Ed
K12
As an Issuer that uses a non-standard enrollment or term approach, I need to assert student achievements individually to augment their record with timely achievement/credential data as they occur, without limiting myself to using other data models/specifications or requiring my school to engineer for multiple data models. I also prefer the robustness of the CLR data model to other alternatives.
Goal of the Primary Actor
: Assert achievements individually using CLR data specification to incrementally update student wallets/LERs with their achievements and credentials as soon as they are earned or on student request. Students will not have to wait until the end of each semester or program completion for their CLR-based achievements to be represented and leverage them in pursuing career goals incrementally.
Example: a student in our Cybersecurity Bachelor's program may earn CISSP certification at program midpoint and be able to gain entry-level employment in the cyber field long before completing their full degree. Incremental assertion of achievements and credentials can help enable this.
Actors
Issuing organizations.
Preconditions for this Use Case
Learner holds a wallet that can accept CLR credentials.
Institution has implemented the CLR VC specification to publish credentials.
Flow of Events
Learner is enrolled in multiple courses and earns achievements within them (i.e., competency-level) and at their completion.
Issuer makes CLR assertion for each discrete achievement as they occur or as the student requests them.
Learner wallet system for a student receives semester/term assertion and displays achievements to the student.
Post-Conditions/Success Criteria
Individual achievement in CLR assertion processed, ingested, and presentable into learner wallet system. Subsequent assertions for later achievements augment the record accordingly.
Points of Failure
Duplicate assertions of individual achievements, revocation.
2.9
Internal Organizational Staff Development and Promotion
Categories
Employment
Training Providers
As a staff member at an employer, such as a University, Pat would like recognition and verification of all the credentials they acquired within the certificate and micro-credential bearing professional development activities they have undertaken during their ten years as an employee. These include LinkedIn Learning courses, MOOCs, technical training programs like AWS Academy, and locally offered in-person training (e.g. Inclusive Hiring practices).
Goal of the Primary Actor
: In pursuit of a promotion to a management position, Pat wants to submit evidence of professional growth that has occurred since graduating with their bachelor's degree 10 years ago. The job posting requires a “Masters degree or equivalent skills and experience” and Pat would like to claim qualification under the latter case.
Actors
Employee.
Training Providers.
Hiring manager.
University HR.
Preconditions for this Use Case
Credentials and evidence must be available within a CLR as individually signed VCs.
Flow of Events
Pat identifies relevant verifiable credentials from within the CLR, and packages them as a self-signed CLR.
Pat transmits the self-signed CLR to the hiring manager for review.
Hiring Manager receives application materials and reviews self-signed CLR and credentials it contains.
University HR verifies credential claims prior to making a job offer.
Post-Conditions/Success Criteria
Pat has ability to audit verification activities against the permitted credentials.
Pat has ability to revoke access privileges on demand.
System has ability to set default access time frames.
Points of Failure
Confidentiality of application process compromised through insufficient Identity and Access Management to CLR records.
Access permissions are not time bound and access lingers beyond the appropriate access window.
2.10
Teacher Placement with a District
Categories
Employment
Sarah, a graduate of a teacher training program, wants to present my license and endorsements to a school district for potential employment.
Goal of the Primary Actor
: Sarah wishes to teach Algebra I at Northwoods High School and prove her credentials are adequate.
Actors
College of education - endorser of teacher candidate for a license.
State - issuer of the license.
Teacher - subject of the license.
District - verifier of the license.
Preconditions for this Use Case
License requirements must be met by the Teacher.
License must be issued with individual expressions of endorsements.
The Issuing system must be capable and willing to express the data programmatically.
Verifiers must be capable and willing to consume the data programmatically.
Flow of events
University creates endorsement of candidate.
Teacher applies for license.
Teacher issued license.
Teacher receives their license as a CLR VC with endorsements as assertions.
District inspects the license.
District inspects the degree.
Teacher is placed in school.
Post-Conditions/Success Criteria
Districts are able to quickly qualify eligible candidates.
Districts have more access to licensed candidates directly matched to their job openings.
Points of Failure
Inability to Issue the license and endorsements programmatically.
Inability to Consume the license programmatically.
Teacher's license is revoked or invalid for the position.
Teacher opts-out to sharing credentials.
2.11
Professional Licensure Test Taker results
As an ETS Praxis test taker I wish to share my test results as a VC with States for issuance of a license.
Goal of the Primary Actor
: Judah wants to get his teaching license in Utah to teach 3rd grade in Granite School District. He has taken the Praxis test for Elementary Education and the test for School Leadership because he may apply for a principal position in the future.
Actors
ETS Praxis Testing system.
Judah.
Utah State Licensure system.
Granite School District Human Resource Department.
Preconditions for this Use Case
ETS Praxis test passed.
ETS Praxis required by the State.
Specific test results are mapped to specific endorsements.
Flow of events
Judah takes 2 Praxis tests and passes.
Judah is issued a VC with the raw test results.
State of Utah receives Judah's Praxis results.
Judah meets all conditions and is issued a license.
GSD has an open position and requests a proof of Praxis score from Judah.
Judah shares the VC of his Praxis Report.
Judah is employed by GSD.
Post-Conditions/Success Criteria
Judah gets placed with a school district 3-6 months faster than current architecture.
No business requirements have to change to achieve this result, only technical.
Points of Failure
The school district cannot import Judah's credentials into their existing systems.
2.12
Students in Tutoring Program
Categories
K12
Sammy is a student being tutored by Terry as part of a high intensity tutoring program.
Goal of the Primary Actor
: Terry's goal is to record an observation of a performance level to one or more learning objective at the beginning and end of each tutoring session.
Preconditions for this Use Case
BCPS has published learning objectives with crosswalks to state standards in CASE.
BCPS has worked with tutoring providers to implement CLR publishing to a learning ledger captured by Microsoft’s Open Education Architecture (OEA).
Flow of Events
Terry Tutor uses a Tutor Operations platform and the beginning and end of each session to record performance level associated with one or more learning objectives.
The Tutor Operations platform publishes an achievement assertion for each objective assessed to a Learning Ledger.
BCPS publishes learner profile views through secure LTI to Canvas LMS.
BCPS packages and publishes sets of achievement assertions as Verifiable Credentials to parent/guardians and adult learners.
Post-Conditions/Success Criteria
Until they are 18, Sammy’s parents are able to hold all requested achievement assertions on any compliant digital wallet and control requests for access and presentation of verifiable records.
Broward College is able to verifiable Sammy’s records.
Points of Failure
CASE Server.
CLR Publishing Engine.
Wallet availability.
Variations
Terry is a teacher, not a tutor and is using a gradebook.
Sammy is administered a test by a 3rd party group.
3.
Getting Started
This section is non-normative.
3.1
Implementation Guide
The
Open Badges Implementation Guide v3.0
contains non-normative information on how to implement [
OB-30
] and [
CLR-20
]. The Guide includes getting started information, best practices, key terms, and other useful inforation.
3.2
Conformance and Certification
Comprehensive Learner Record Standard Conformance and Certification Guide v2.0
- Specifies the conformance tests and certification requirements for this specification.
4.
CLR Standard Document Formats
ClrCredentials
can be exchanged as documents as defined in this section, or using the
CLR Standard API
. Documents can be exchanged as a text file, as a web resource, or embedded in an image. The contents of a CLR document
MUST
meet the following criteria:
The contents of the CLR document
MUST
represent exactly one
ClrCredential
The contents
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
].
4.1
File Format
If the credential is signed using the
7.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
ClrCredential
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
ClrCredential
. The file extension
SHOULD
be ".json".
4.2
Web Resource
If the credential is signed using the
7.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
ClrCredential
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
ClrCredential
. The
Content-Type
SHOULD
be
application/vc+ld+json
, although generic representations such
application/ld+json
or
application/json
are also allowed.
4.3
Image Format
Comprehensive Learner Records (CLRs) may be exchanged as image files with CLRs encoded within. This allows CLRs to be portable wherever image files may be stored or displayed.
"Baking" is the process of taking a
ClrCredential
and embedding it into the image, so that when a user displays the image on a page, software that is CLR-aware can automatically extract that ClrCredential data and perform the checks necessary to see if a person legitimately earned the achievements within the CLR. The image must be in either [
PNG
] or [
SVG
] format in order to support baking.
4.3.1
PNGs
4.3.1.1
Baking
An
iTXt
chunk should be inserted into the PNG with
keyword
clrcredential
If the credential is signed using the
7.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
ClrCredential
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
'clrcredential'
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
ClrCredential
. Compression
MUST NOT
be used.
Example
: An example of creating a chunk with embedded proof (assuming an iTXt constructor)
var chunk = new iTXt({
keyword: 'clrcredential',
compression: 0,
compressionMethod: 0,
languageTag: '',
translatedKeyword: '',
text: '{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/clr/v2p0/context-2.0.1.json",
"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", "ClrCredential"],
"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
clrcredential
MUST NOT
appear in a PNG more than once. When baking an image that already contains credential data, the implementor may choose whether to pass the user an error or overwrite the existing chunk.
4.3.1.2
Extracting
Parse the PNG datastream until the first
iTXt
chunk is found with the keyword
clrcredential
. The rest of the stream can be safely discarded. The text portion of the iTXt chunck will either be the JSON representation of a
B.1.1
ClrCredential
or the
Compact JWS
string that was the result of signing the
ClrCredential
with
7.2
JSON Web Token Proof Format
4.3.2
SVG
4.3.2.1
Baking
First, add an
xmlns:clr
attribute to the

tag with the value "
". Directly after the

tag, add an

tag.
If the credential is signed using the
7.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
ClrCredential
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:clr
"https://purl.imsglobal.org/clr/v2p0"
viewBox
"0 0 512 512"
clr:credential
verify
"header.payload.signature"
clr:credential

svg
If an embedded proof method is used instead, omit the
verify
attribute, and the JSON representation of the
ClrCredential
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:clr
"https://purl.imsglobal.org/clr/v2p0"
viewBox
"0 0 512 512"
clr:credential
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/clr/v2p0/context-2.0.1.json",
"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", "ClrCredential"],
"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"
},
"proof": { }
]]>
clr:credential

svg
There
MUST
be only one

tag in an SVG. When baking an image that already contains ClrCredential data, the implementor may choose whether to pass the user an error or overwrite the existing tag.
4.3.2.2
Extracting
Parse the SVG until you reach the first

tag. The rest of the SVG data can safely be discarded.
5.
CLR Standard API
CLRs
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
Comprehensive Learner Record Standard Conformance and Certification Guide v2.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
CLR Standard API in both JSON and YAML format:
JSON OpenAPI File
YAML OpenAPI File
5.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 (ClrCredentials) 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 (ClrCredentials). 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.
5.2
Secure REST Endpoints
These endpoints are used to exchange ClrCredentials 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
6.
CLR Standard API Security
5.2.1
Scopes
Each endpoint requires an access token with a specific CLR Standard scope as shown below.
Operation
Scope
getCredentials
Permission to read ClrCredentials for the authenticated entity.
upsertCredential
Permission to create or update ClrCredentials for the authenticated entity.
getProfile
Permission to read the profile for the authenticated entity.
putProfile
Permission to update the profile for the authenticated entity.
5.2.2
getCredentials
Get issued ClrCredentials from the
resource server
for the supplied parameters and access token.
5.2.2.1
Request
GET /ims/clr/v2p0/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 ClrCredentials to return per page.
Optional
offset
(query)
NonNegativeInteger
The index of the first ClrCredential to return. (zero indexed)
Optional
since
(query)
DateTime
Only include ClrCredentials issued after this timestamp.
Optional
5.2.2.2
Responses
Allowed response codes and content types
Status Code
Content-Type Header
Content Type
Content Description
Content Required
200
application/json
GetClrCredentialsResponse
The set of ClrCredentials that meet the request parameters. Paging applies to the total number of ClrCredentials 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/clr/v2p0/credentials?limit=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/json
X-Total-Count: 1
Link: ; rel="next",
; rel="last",
; rel="first",
; rel="prev"

"credential": [
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/clr/v2p0/context-2.0.1.json",
"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",
"ClrCredential"
],
"issuer": {
"id": "https://example.edu/issuers/565049",
"name": "Example University"
},
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"verifiableCredential": [
"@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": "urn:uuid:91537dba-56cb-11ec-bf63-0242ac130002",
"type": [
"VerifiableCredential",
"AchievementCredential"
],
"issuer": {
"id": "https://example.edu/issuers/565049",
"type": "Publisher",
"name": "Example University"
},
"validFrom": "2010-01-01T00:00:00Z",
"achievement": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21"
},
"credentialSchema": [{
"id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_clrcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
}],
"proof": {
"type": "DataIntegrityProof",
"cryptosuite": "eddsa-rdf-2022",
"created": "2022-04-07T21:25:44Z",
"verificationMethod": "https://example.edu/issuers/565049#zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA",
"proofPurpose": "assertionMethod",
"proofValue": "z2MVFHXZ8YK32d9zUfFk9hJsVNfdg3vDJsxSRqKpdaJ9T8WLAg1NcTHB91tfJrfDFkLBKtrRQFjqGkeTF3yqcz8ut"
],
"achievement": [
"id": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"creator": {
"id": "https://example.edu/issuers/565049"
},
"name": "Achievement 1",
"description": "Achievement 1",
"image": {
"id": "https://example.edu/achievements/sample.png"
},
"id": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002",
"creator": {
"id": "https://example.edu/issuers/565049"
},
"name": "Achievement 2",
"description": "Achievement 2",
"image": {
"id": "https://example.edu/achievements/sample.png"
],
"association": [
"associationType": "isParentOf",
"sourceId": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"targetId": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
},
"credentialSchema": [
"id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_achievementcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
],
"proof": {
"type": "DataIntegrityProof",
"cryptosuite": "eddsa-rdf-2022",
"created": "2022-04-07T21:25:44Z",
"verificationMethod": "https://example.edu/issuers/565049#zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA",
"proofPurpose": "assertionMethod",
"proofValue": "zMkGPxkm3cxzEAxbjTW9MWyQEM6WZNigeoGpqA2MZhPFqotVnin6oBJSya8hqwqcFRCWMHPedDUKrn31VQGgE9BF"
],
"compactJwsString": [
"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy5
3My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vZGMuaW1zZ2xvYmFsLm9yZy9kcmFmdC9
jbHIvdjJwMC9jb250ZXh0IiwiaHR0cHM6Ly9pbXNnbG9iYWwuZ2l0aHViLmlvL29wZW5iYWRnZXMtc3B
lY2lmaWNhdGlvbi9jb250ZXh0Lmpzb24iXSwiaWQiOiJodHRwOi8vZXhhbXBsZS5lZHUvY3JlZGVudGl
hbHMvMzczMiIsInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJDbHJDcmVkZW50aWFsIl0sIml
zc3VlciI6eyJpZCI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvaXNzdWVycy81NjUwNDkiLCJuYW1lIjoiRXh
hbXBsZSBVbml2ZXJzaXR5In0sImlzc3VhbmNlRGF0ZSI6IjIwMTAtMDEtMDFUMDA6MDA6MDBaIiwiY3J
lZGVudGlhbFN1YmplY3QiOnsiaWQiOiJkaWQ6ZXhhbXBsZTplYmZlYjFmNzEyZWJjNmYxYzI3NmUxMmV
jMjEiLCJhc3NlcnRpb25zIjpbImV5SmhiR2NpT2lKU1V6STFOaUlzSW5SNWNDSTZJa3BYVkNKOS5leUo
yWXlJNmV5SkFZMjl1ZEdWNGRDSTZXeUpvZEhSd2N6b3ZMM2QzZHk1M015NXZjbWN2TWpBeE9DOWpjbVZ
rWlc1MGFXRnNjeTkyTVNJc0ltaDBkSEJ6T2k4dmFXMXpaMnh2WW1Gc0xtZHBkR2gxWWk1cGJ5OXZjR1Z
1WW1Ga1oyVnpMWE53WldOcFptbGpZWFJwYjI0dlkyOXVkR1Y0ZEM1cWMyOXVJbDBzSW1sa0lqb2lkWEp
1T25WMWFXUTZPVEUxTXpka1ltRXROVFpqWWkweE1XVmpMV0ptTmpNdE1ESTBNbUZqTVRNd01EQXlJaXd
pZEhsd1pTSTZXeUpXWlhKcFptbGhZbXhsUTNKbFpHVnVkR2xoYkNJc0lrRnpjMlZ5ZEdsdmJrTnlaV1J
sYm5ScFlXd2lYU3dpYVhOemRXVnlJanA3SW1sa0lqb2lhSFIwY0hNNkx5OWxlR0Z0Y0d4bExtVmtkUzl
wYzNOMVpYSnpMelUyTlRBME9TSXNJblI1Y0dVaU9pSlFkV0pzYVhOb1pYSWlMQ0p1WVcxbElqb2lSWGh
oYlhCc1pTQlZibWwyWlhKemFYUjVJbjBzSW1semMzVmhibU5sUkdGMFpTSTZJakl3TVRBdE1ERXRNREZ
VTURBNk1EQTZNREJhSWl3aVlXTm9hV1YyWlcxbGJuUWlPaUoxY200NmRYVnBaRHBrWkRnNE4yWXdZUzA
xTm1OaUxURXhaV010WW1ZMk15MHdNalF5WVdNeE16QXdNRElpTENKamNtVmtaVzUwYVdGc1UzVmlhbVZ
qZENJNmV5SnBaQ0k2SW1ScFpEcGxlR0Z0Y0d4bE9tVmlabVZpTVdZM01USmxZbU0yWmpGak1qYzJaVEV
5WldNeU1TSjlMQ0pqY21Wa1pXNTBhV0ZzVTJOb1pXMWhJanBiZXlKcFpDSTZJbWgwZEhCek9pOHZjSFZ
5YkM1cGJYTm5iRzlpWVd3dWIzSm5MME5zY2tOeVpXUmxiblJwWVd3dWFuTnZiaUlzSW5SNWNHVWlPaUp
LYzI5dVUyTm9aVzFoVm1Gc2FXUmhkRzl5TWpBeU1DSjlYWDBzSW1semN5STZleUpwWkNJNkltaDBkSEJ
6T2k4dlpYaGhiWEJzWlM1bFpIVXZhWE56ZFdWeWN5ODFOalV3TkRraUxDSjBlWEJsSWpvaVVIVmliR2x
6YUdWeUlpd2libUZ0WlNJNklrVjRZVzF3YkdVZ1ZXNXBkbVZ5YzJsMGVTSjlMQ0p1WW1ZaU9qRXlOakl
6TURRd01EQXNJbXAwYVNJNkluVnlianAxZFdsa09qa3hOVE0zWkdKaExUVTJZMkl0TVRGbFl5MWlaall
6TFRBeU5ESmhZekV6TURBd01pSXNJbk4xWWlJNkltUnBaRHBsZUdGdGNHeGxPbVZpWm1WaU1XWTNNVEp
sWW1NMlpqRmpNamMyWlRFeVpXTXlNU0o5Lk9idmlwaTNyTVVvbWZHaEZwTlZ1WVk5ekpXVUtVSTg2SXJ
ZRlRtNDdScDJSc1hGYUlBYXJHZlE4X3ZVS0R1RVh0MDRma1liQUpxVno1UGhrYkpUTlZULWtGMXpWaXV
vdUNucXIwN1gzYmZfb2U0RUxKN2FEVXp6N2hKdEpKdmdCTzVlYzFSN3ZHVnBMc0kwYm1sbFlNVlFzeEs
xejFQS3lGdEFTTDM0WUo1N3NwQkVzbE1RNEc2RENiRTZOSktPM2lqZk1LTUxkT2RPbHVnb3hINjVyQnp
nWlRxWlI0RkMwbXpmWHJGQUhFeVFqdktlMHFJdWJLbjJsV3FKRTFNbDg5SDRSX3dzenFHTEtIOWpSdVJ
VcEE0REp5ZFd4Z0xSbjhTYXJSRl9WUWoxaktsdjNCWTZuUEtGSjN0VF81ZXBrUmQxQnF0MG94UHJhQjJ
UVzg1aFNuUSJdLCJhY2hpZXZlbWVudHMiOlt7ImlkIjoidXJuOnV1aWQ6YTc0NjdlZjYtNTZjYi0xMWV
jLWJmNjMtMDI0MmFjMTMwMDAyIiwiY3JlYXRvciI6eyJpZCI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvaXN
zdWVycy81NjUwNDkifSwibmFtZSI6IkFjaGlldmVtZW50IDEiLCJkZXNjcmlwdGlvbiI6IkFjaGlldmV
tZW50IDEiLCJpbWFnZSI6eyJpZCI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvYWNoaWV2ZW1lbnRzL3NhbXB
sZS5wbmcifX0seyJpZCI6InVybjp1dWlkOmRkODg3ZjBhLTU2Y2ItMTFlYy1iZjYzLTAyNDJhYzEzMDA
wMiIsImNyZWF0b3IiOnsiaWQiOiJodHRwczovL2V4YW1wbGUuZWR1L2lzc3VlcnMvNTY1MDQ5In0sIm5
hbWUiOiJBY2hpZXZlbWVudCAyIiwiZGVzY3JpcHRpb24iOiJBY2hpZXZlbWVudCAyIiwiaW1hZ2UiOns
iaWQiOiJodHRwczovL2V4YW1wbGUuZWR1L2FjaGlldmVtZW50cy9zYW1wbGUucG5nIn19XSwiYXNzb2N
pYXRpb25zIjpbeyJhc3NvY2lhdGlvblR5cGUiOiJpc1BhcmVudE9mIiwic291cmNlSWQiOiJ1cm46dXV
pZDphNzQ2N2VmNi01NmNiLTExZWMtYmY2My0wMjQyYWMxMzAwMDIiLCJ0YXJnZXRJZCI6InVybjp1dWl
kOmRkODg3ZjBhLTU2Y2ItMTFlYy1iZjYzLTAyNDJhYzEzMDAwMiJ9XX0sImNyZWRlbnRpYWxTY2hlbWE
iOlt7ImlkIjoiaHR0cHM6Ly9wdXJsLmltc2dsb2JhbC5vcmcvQWNoaWV2ZW1lbnRDcmVkZW50aWFsLmp
zb24iLCJ0eXBlIjoiSnNvblNjaGVtYVZhbGlkYXRvcjIwMjAifV19LCJpc3MiOnsiaWQiOiJodHRwczo
vL2V4YW1wbGUuZWR1L2lzc3VlcnMvNTY1MDQ5IiwibmFtZSI6IkV4YW1wbGUgVW5pdmVyc2l0eSJ9LCJ
uYmYiOjEyNjIzMDQwMDAsImp0aSI6Imh0dHA6Ly9leGFtcGxlLmVkdS9jcmVkZW50aWFscy8zNzMyIiw
ic3ViIjoiZGlkOmV4YW1wbGU6ZWJmZWIxZjcxMmViYzZmMWMyNzZlMTJlYzIxIn0.hb_qNMd6nQBU9T0
0ohxvQDJ95kcnPRd_RMZqvpvsgCqvzIzXV1HV1wZ7mxNkaIlNim-JA1MgFlh3C1I_s2iGRBn9jSZAHvT
JGyhiU_80Jhi1R8K2BymlB3T3o3_g0waCrsSIoAcN6NFnpDCR4Taop_JCBoC8msDG4qKskq0wEDYhR3N
09qvdl1kkJVmFJNc0R_5QK54kIk8YEzeClgo3ceh4q7ooPBRvfduehYButLZkhy3rQP9Y8kIyCMvrhL9
5FwlnEeIY3YVz52qlhrk_SXMX6e-pKY-beqcJa_i0AS_ZG6iz6bN0T99UOd9coczJDt6nzr5B2P8Iz6c
IcZmx2A"
5.2.3
upsertCredential
Create or replace a ClrCredential 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.
5.2.3.1
Request
POST /ims/clr/v2p0/credentials
Allowed request content types
Content-Type Header
Content Type
Content Description
Content Required
application/json
ClrCredential
If the ClrCredential is not signed with the VC-JWT Proof Format, the request body
MUST
be a ClrCredential and the
Content-Type
MUST
be
application/vc+ld+json
or
application/json
Required
text/plain
CompactJws
If the ClrCredential 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
5.2.3.2
Responses
Allowed response codes and content types
Status Code
Content-Type Header
Content Type
Content Description
Content Required
200
application/json
ClrCredential
The ClrCredential was successfully replaced on the
resource server
. The response body
MUST
be the ClrCredential in the request.
If the ClrCredential is not signed with the VC-JWT Proof Format, the response body
MUST
be a ClrCredential and the
Content-Type
MUST
be
application/vc+ld+json
or
application/json
Required
200
text/plain
CompactJws
The ClrCredential was successfully replaced on the
resource server
. The response body
MUST
be the ClrCredential in the request.
If the ClrCredential 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
ClrCredential
The ClrCredential was successfully created on the
resource server
. The response body
MUST
be the ClrCredential in the request.
If the ClrCredential is not signed with the VC-JWT Proof Format, the response body
MUST
be a ClrCredential and the
Content-Type
MUST
be
application/vc+ld+json
or
application/json
Required
201
text/plain
CompactJws
The ClrCredential was successfully created on the
resource server
. The response body
MUST
be the ClrCredential in the request.
If the ClrCredential 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/clr/v2p0/credentials
Host: example.edu
Authorization: Bearer 863DF0B10F5D432EB2933C2A37CD3135A7BB7B07A68F65D92
Accept: application/json
Content-Type: application/json

"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/clr/v2p0/context.json",
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
],
"id": "http://example.edu/credentials/3732",
"type": [
"VerifiableCredential",
"ClrCredential"
],
"issuer": {
"id": "https://example.edu/issuers/565049",
"name": "Example University"
},
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"verifiableCredential": [
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
],
"id": "urn:uuid:91537dba-56cb-11ec-bf63-0242ac130002",
"type": [
"VerifiableCredential",
"AchievementCredential"
],
"issuer": {
"id": "https://example.edu/issuers/565049",
"type": "Publisher",
"name": "Example University"
},
"validFrom": "2010-01-01T00:00:00Z",
"achievement": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21"
},
"credentialSchema": [{
"id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_clrcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
}],
"proof": {
"type": "DataIntegrityProof",
"cryptosuite": "eddsa-rdf-2022",
"created": "2022-04-07T21:25:44Z",
"verificationMethod": "https://example.edu/issuers/565049#zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA",
"proofPurpose": "assertionMethod",
"proofValue": "z2MVFHXZ8YK32d9zUfFk9hJsVNfdg3vDJsxSRqKpdaJ9T8WLAg1NcTHB91tfJrfDFkLBKtrRQFjqGkeTF3yqcz8ut"
],
"achievement": [
"id": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"creator": {
"id": "https://example.edu/issuers/565049"
},
"name": "Achievement 1",
"description": "Achievement 1",
"image": {
"id": "https://example.edu/achievements/sample.png"
},
"id": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002",
"creator": {
"id": "https://example.edu/issuers/565049"
},
"name": "Achievement 2",
"description": "Achievement 2",
"image": {
"id": "https://example.edu/achievements/sample.png"
],
"association": [
"associationType": "isParentOf",
"sourceId": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"targetId": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
},
"credentialSchema": [
"id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_achievementcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
],
"proof": {
"type": "DataIntegrityProof",
"cryptosuite": "eddsa-rdf-2022",
"created": "2022-04-07T21:25:44Z",
"verificationMethod": "https://example.edu/issuers/565049#zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA",
"proofPurpose": "assertionMethod",
"proofValue": "zMkGPxkm3cxzEAxbjTW9MWyQEM6WZNigeoGpqA2MZhPFqotVnin6oBJSya8hqwqcFRCWMHPedDUKrn31VQGgE9BF"
Example
: Sample upsertCredential Response
HTTP/1.1
200
OK
Content-Type
application/json
"@context"
"https://www.w3.org/ns/credentials/v2"
"https://purl.imsglobal.org/spec/clr/v2p0/context-2.0.1.json"
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
"id"
"http://example.edu/credentials/3732"
"type"
"VerifiableCredential"
"ClrCredential"
"issuer"
"id"
"https://example.edu/issuers/565049"
"name"
"Example University"
"validFrom"
"2010-01-01T00:00:00Z"
"credentialSubject"
"id"
"did:example:ebfeb1f712ebc6f1c276e12ec21"
"verifiableCredential"
"@context"
"https://www.w3.org/ns/credentials/v2"
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
"id"
"urn:uuid:91537dba-56cb-11ec-bf63-0242ac130002"
"type"
"VerifiableCredential"
"AchievementCredential"
"issuer"
"id"
"https://example.edu/issuers/565049"
"type"
"Publisher"
"name"
"Example University"
"validFrom"
"2010-01-01T00:00:00Z"
"achievement"
"urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
"credentialSubject"
"id"
"did:example:ebfeb1f712ebc6f1c276e12ec21"
"credentialSchema"
"id"
"https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_clrcredential_schema.json"
"type"
"1EdTechJsonSchemaValidator2019"
"proof"
"type"
"DataIntegrityProof"
"cryptosuite"
"eddsa-rdf-2022"
"created"
"2022-04-07T21:25:44Z"
"verificationMethod"
"https://example.edu/issuers/565049#zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA"
"proofPurpose"
"assertionMethod"
"proofValue"
"z2MVFHXZ8YK32d9zUfFk9hJsVNfdg3vDJsxSRqKpdaJ9T8WLAg1NcTHB91tfJrfDFkLBKtrRQFjqGkeTF3yqcz8ut"
"achievement"
"id"
"urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002"
"creator"
"id"
"https://example.edu/issuers/565049"
"name"
"Achievement 1"
"description"
"Achievement 1"
"image"
"id"
"https://example.edu/achievements/sample.png"
"id"
"urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
"creator"
"id"
"https://example.edu/issuers/565049"
"name"
"Achievement 2"
"description"
"Achievement 2"
"image"
"id"
"https://example.edu/achievements/sample.png"
"association"
"associationType"
"isParentOf"
"sourceId"
"urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002"
"targetId"
"urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
"credentialSchema"
"id"
"https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_achievementcredential_schema.json"
"type"
"1EdTechJsonSchemaValidator2019"
"proof"
"type"
"DataIntegrityProof"
"cryptosuite"
"eddsa-rdf-2022"
"created"
"2022-04-07T21:25:44Z"
"verificationMethod"
"https://example.edu/issuers/565049#zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA"
"proofPurpose"
"assertionMethod"
"proofValue"
"zMkGPxkm3cxzEAxbjTW9MWyQEM6WZNigeoGpqA2MZhPFqotVnin6oBJSya8hqwqcFRCWMHPedDUKrn31VQGgE9BF"
5.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.
5.2.4.1
Request
GET /ims/clr/v2p0/profile
5.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
: Sample getProfile Request
GET
/ims/clr/v2p0/profile
HTTP/1.1
Host
example.edu
Authorization
Bearer 863DF0B10F5D432EB2933C2A37CD3135A7BB7B07A68F65D92
Accept
application/json
Example
10
: 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"
5.2.5
putProfile
Update the profile for the authenticate entity.
5.2.5.1
Request
PUT /ims/clr/v2p0/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
5.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
11
: Sample putProfile Request
PUT
/ims/clr/v2p0/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
12
: 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"
5.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.
5.3.1
getServiceDescription
Fetch the Service Description Document from the
resource server
5.3.1.1
Request
GET /ims/clr/v2p0/discovery
5.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
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
13
: Sample getServiceDescription request
GET /ims/clr/v2p0/discovery HTTP/1.1
Host: example.edu
Accept: application/json
Example
14
: 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/clr/v2p0/scope/credential.readonly"
"..."
"https://purl.imsglobal.org/spec/clr/v2p0/scope/credential.upsert"
"..."
"https://purl.imsglobal.org/spec/clr/v2p0/scope/profile.readonly"
"..."
"https://purl.imsglobal.org/spec/clr/v2p0/scope/profile.update"
"..."
},
"schemas"
: {
...
...
5.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.
5.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).
6.
CLR Standard API Security
The
CLR Stardard API
endpoints must 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
. A partial list of examples are shown in the table
below:
Example
Grant Method to Use
A university system maintains an achievement hub that students and alumni can use to retrieve their
personal extended transcript. One of the students is using a digital wallet to assemble a personal
portfolio. The student uses the wallet application to get their extended transcript from the
university system's achievement hub. The
client
is the wallet application and the
server
is
the achievement hub.
OAuth 2.0 Authorization Code Grant
because the learner is accessing their
own individual resources.
A learner has used a digital wallet to assemble a comprehensive record of their achievements. The
learner uses the wallet application to "submit" their CLR to a potential employer. The
client
is
the wallet application and the
server
is the employer's career tracking system.
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.
6.1
Using OAuth 2.0 Authorization Code Grant
In scenarios where the learner or another third party is the resource owner, there will not be a
pre-established trust relationship. Therefore the client credentials approach is insufficient. Instead you
MUST
use of OAuth 2.0 Authorization Code Grant.
Making a secured CLR Standard API request using authorization code grant comprises three steps:
6.1.1
ACG - Registration
- Share configuration information between the
client
and the
server
6.1.2
ACG - 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.
6.1.3
ACG - Authenticating with Tokens
- Use the access token in the Authorization header of the API request
6.1.1
ACG - Registration
To get started, the
client
and
authorization server
must share the four pieces of information
shown below.
Clients
and
servers
that implement the Authorization Code Grant (ACG) method of
resource access
MUST
implement
6.4
Dynamic Client Registration
to share this information.
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.
6.1.2
ACG - 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
6.1.2.1
ACG - Authorization Request
Then request an access token using the authorization code -
§ ACG - 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
6.2.1
Token Refresh Request
).
6.1.2.1
ACG - Authorization Request
After the
client
application is registered with the
authorization server
as described in
6.4
Dynamic Client Registration
, the
client
application then
MAY
initiate an authorization request
as described in Section 4.2 of the
IMS Global Security Framework v1.1
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
6.4.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
6.1.1
ACG - Registration
request. Although this is
optional in the
IMS Global Security Framework v1.1
, 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
15
: Sample ACG authorization request (line breaks for clarity)
HTTP/1.1 302 Found
Location: https://auth.example.com/authorize?
client_id=4ad36680810420ed
&response_type=code
&scope=https%3A%2F%2Fpurl.imsglobal.org%2Fspec%2Fclr%2Fv2p0%2Fscope%2Fcredential.readonly%20offline_access
&redirect_uri=https%3A%2F%client.example.com%2FAuthorize
&state=26357667-94df-4a14-bcb1-f55449ddd98d
&code_challenge=XeDw66i9FLjn7XaecT_xaFyUWWfUub02Kw118n-jbEs
&code_challenge_method=S256
ACG - 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
16
: Sample ACG authorization response (line breaks for clarity)
HTTP/1.1 302 Found
Location https://client.example.com/Authorize?
code=dcf95d196ae04d60aad7e19d18b9af755a7b593b680055158b8ad9c2975f0d86
&scope=https%3A%2F%2Fpurl.imsglobal.org%2Fspec%2Fclr%2Fv2p0%2Fscope%2Fcredential.readonly%20offline_access
&state=26357667-94df-4a14-bcb1-f55449ddd98d
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.
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
state
String
The opaque value supplied by the client to maintain state between the request and
callback.
Required
Example
17
: Sample authorization error response
HTTP/1.1
302
Found
Location
ACG - 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
18
: Sample ACG token request (line breaks for clarity)
POST
/token
HTTP/1.1
Host
auth.example.com
Authorization
Basic NDE2ZjI1YjhjMWQ5OThlODoxNWQ5MDA4NTk2NDdkZDlm
Content-Type
application/x-www-form-urlencoded

grant_type=authorization_code
&code=7c7a73263ee14b2b48073d0615f286ec74f6636689046cb8dbede0b5e87a1338
&redirect_uri=https%3A%2F%client.example.com%2FAuthorize
&scope=https%3A%2F%2Fpurl.imsglobal.org%2Fspec%2Fclr%2Fv2p0%2Fscope%2Fcredential.readonly+offline_access
&code_verifier=mYUQfKNgI1lSbY8EqtvNHLPzu0x%2FcVKO3fpWnX4VE5I%3D
ACG - 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
6.2.1
Token Refresh Request
Optional
Example
19
: 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/clr/v2p0/scope/credential.readonly offline_access"
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
20
: 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"
6.1.3
ACG - Authenticating with Tokens
After obtaining an
access_token
and optionally a
refresh_token
using the method above,
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"
would look like this:
Example
21
: Sample getCredentials request
GET ims/clr/v2p0/credentials
Host: example.edu
Authorization: Bearer 863DF0B10F5D432EB2933C2A37CD3135A7BB7B07A68F65D92
Accept: application/ld+json
6.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.
6.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
22
: Sample ACG token refresh request
POST
/token
HTTP/1.1
Host
auth.example.com
Authorization
Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type
application/x-www-form-urlencoded

grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA&scope=https%3A%2F%2Fpurl.imsglobal.org%2Fspec%2Fclr%2Fv2p0%2Fscope%2credential.readonly
6.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
§ ACG - Access Token Response
. If the request failed verification or
is invalid, the
authorization server
returns an error response as described earlier in
§ Access Token Error Response
6.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.
6.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
23
: Sample token revocation request
POST
/revoke
HTTP/1.1
Host
server.example.com
Authorization
Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type
application/x-www-form-urlencoded

token=45ghiukldjahdnhzdauz&token_type_hint=refresh_token
6.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
§ Access Token Error Response
with an
error
code of "unsupported_token_type".
6.4
Dynamic Client Registration
Clients
and
servers
that implement the Authentication Code Grant (ACG) method of resource access
MUST
implement the OAuth 2.0 Dynamic Client Registration Protocol [
RFC7591
]. There are two steps in
this
process:
Request the Service Description Document (SDD) from the
resource server
Register with the
authorization server
Figure
Sequence diagram for dynamic client registration when using ACG flow
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.
6.4.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) as shown in
5.3.1
getServiceDescription
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, a
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.
6.4.2
Register with Authorization Server
With the Client Registration URL in hand (from 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://example.com/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 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 described below:
Permission to read CLRs for the
user
on the
resource server
platform.
Permission to create or update CLRs for the
user
on the
resource server
platform.
Permission to read the profile for the
user
on the
resource server
platform.
Permission to update the profile for the
user
on the
resource server
platform.
offline_access
Permission to issue a
refresh_token
along with the
access_token
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
24
: Sample registration request
POST
/connect/register
HTTP/1.1
Host
auth.example.com
Accept
application/json
Content-Type
application/json; charset=utf-8
"client_name"
"Example Client Application"
"client_uri"
"https://client.example.com/"
"logo_uri"
"https://client.example.com/logo.png"
"tos_uri"
"https://client.example.com/terms"
"policy_uri"
"https://client.example.com/privacy"
"software_id"
"c88b6ed8-269e-448e-99be-7e2ff47167d1"
"software_version"
"v4.0.30319"
"redirect_uris"
"https://client.example.com/Authorize"
"token_endpoint_auth_method"
"client_secret_basic"
"grant_types"
"authorization_code"
"refresh_token"
"response_types"
"code"
"scope"
"https://purl.imsglobal.org/spec/clr/v2p0/scope/credential.readonly https://purl.imsglobal.org/spec/clr/v2p0/scope/credential.upsert https://purl.imsglobal.org/spec/clr/v2p0/scope/profile.readonly https://purl.imsglobal.org/spec/clr/v2p0/scope/profile.update 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
25
: 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.example.com/"
"logo_uri"
"https://client.example.com/logo.png"
"tos_uri"
"https://client.example.com/terms"
"policy_uri"
"https://client.example.com/privacy"
"software_id"
"c88b6ed8-269e-448e-99be-7e2ff47167d1"
"software_version"
"v4.0.30319"
"redirect_uris"
"https://client.example.com/Authorize"
"token_endpoint_auth_method"
"client_secret_basic"
"grant_types"
"authorization_code"
"refresh_token"
"response_types"
"code"
"scope"
"https://purl.imsglobal.org/spec/clr/v2p0/scope/credential.readonly https://purl.imsglobal.org/spec/clr/v2p0/scope/credential.upsert https://purl.imsglobal.org/spec/clr/v2p0/scope/profile.readonly https://purl.imsglobal.org/spec/clr/v2p0/scope/profile.update 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
ASCIIString
Human-readable ASCII text description of the error used for debugging.
Optional
7.
Proofs (Signatures)
This section describes mechanisms for ensuring the authenticity and integrity of CLR Standard documents and payloads. 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
7.1
Proof Formats
The proof formats included in this specification fall into two categories:
JSON Web Token Proof - Somtimes 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.
7.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
], refered 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.
7.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
7.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 ClrCredential.
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 ommitted from the
ClrCredential
. If a Linked Data Proof is also provided, it
MUST
be created before the JSON Web Token Proof Format is created.
7.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
26
: Sample JOSE Header with reference to a public key in a JWKS
"alg"
"RS256"
"kid"
"https://example.edu/keys#key-1"
"typ"
"JWT"
7.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.
7.2.4.1
Sign Nested Credentials
ClrCredential
has nested
verifiable credentials
. The
Verifiable Credentials Data Model v2.0
specification does not specify how to encode a JWT Payload when the credential has nested credentials. To help ensure interoperability, this specification defines how to encode the JWT Payload with nested credentials.
The JSON Web Token Proof for each nested credential
MUST
be created prior to creating the JWT Payload for the parent credential. Because the JSON Web Token Proof for each nested credential is a Compact JWS string rather than a JSON object, the data model for a ClrCredential with VC-JWT proof is
ClrCredentialJwtPayload
Create a JSON object using the
ClrCredentialJwtPayload
data model.
Copy all of the claims from the parent credential to the new JSON object except for the nested credentials.
Process each nested credential:
If the nested credential is already signed with a JSON Web Token Proof, simply add the Compact JWS string to the new JSON object.
If the nested credential is not signed with a JSON Web Token Proof, sign it with a JSON Web Token Proof and add the resulting Compact JWS string to the new JSON object.
Use the new JSON object to form the JWT Payload.
Example
27
: Sample ClrCredential prior to signing the nested AchievementCredentials
...
"credentialSubject": {
"verifiableCredential": [
"id": "assertion1",
...
},
"id": "assertion2",
...
Example
28
: Sample ClrCredential after signing the nested AchievementCredentials
...
"credentialSubject": {
"verifiableCredential": [
"header.payload.signature",
"header.payload.signature"
7.2.4.2
JWT Payload Format
The JWT Payload is the JSON object 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 ClrCredential. Required if the ClrCredential has an
validUntil
Optional
iss
URI
The
issuer.id
property of the ClrCredential.
Required
jti
URI
The
id
property of the ClrCredential.
Required
nbf
NumericDate
The
validFrom
property of the ClrCredential.
Required
sub
URI
The
credentialSubject.id
property of the ClrCredential.
Required
vc
ClrCredential
The ClrCredential being signed.
Required
7.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.
7.2.6
Verify a ClrCredential
Verifiers that receive a ClrCredential 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 a
ClrCredential
and continue with
7.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
ClrCredential
and continue with
7.2.6.1
Verify a Credential VC-JWT Signature
7.2.6.1
Verify a Credential VC-JWT Signature
The JSON object
MUST
have the
iss
claim, and the value
MUST
match the
id
of the
issuer
of the
ClrCredentialJwtPayload
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
id
of the
credentialSubject
of the
ClrCredentialJwtPayload
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
ClrCredentialJwtPayload
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
ClrCredentialJwtPayload
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
ClrCredentialJwtPayload
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
7.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.
7.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 Algothim
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.
7.3.2
Verify a ClrCredential Linked Data Signature
Verify the Linked Data Proof signature as shown in
Section 7.2 Proof Verification Algorthim
of [
DATA-INTEGRITY-SPEC
].
7.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
7.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.
8.
Verification and Validation
Verification
is the process to determine whether a
verifiable credential
is an authentic and timely statement of the issuer or presenter respectively. This includes checking that: the credential 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 meets the needs of the verifier and other dependent stakeholders. Validating verifiable credentials is outside the scope of this specification.
Note
The 1EdTech Validator performs
verification
as described here.
8.1
ClrCredential Verification
This section applies to Verifiable Credentials with a
type
of "ClrCredential".
Check that the ClrCredential conforms to the specification:
If the ClrCredential 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
ClrCredentials 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.11
Verification Support Data Models
and
B.9
Derived Types
, respectively.
Check that the proof method is satisfied:
If the ClrCredential is signed using the
7.2
JSON Web Token Proof Format
(VC-JWT), verify the signature as shown in
7.2.6
Verify a ClrCredential
. If the ClrCredential is signed using an embedded proof, verify the signature as shown in
7.3.2
Verify a ClrCredential Linked Data Signature
. If the signature cannot be verified, the proof method is not satisfied.
Note
The ClrCredential 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 ClrCredential in the signed JWT Payload. You may accept any one proof for verification. You do not need to verify all the signatures.
Refresh the ClrCredential:
Note
Refresh must be completed after checking the proof so that the verifier is not spoofed into receiving a refreshed ClrCredential from a bad actor.
If the
refreshService
property is present, and the
type
of the
RefreshService
object is "ImsCredentialRefresh", refresh the credential 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 ClrCredential.
Note
Only perform Refresh once. That is, do not complete Refresh a second time even if the refreshed ClrCredential 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 ClrCredential is not yet valid.
If the current date and time is after the
validUntil
, the ClrCredential is expired.
Note
ClrCredentials 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.11
Verification Support Data Models
and
B.9
Derived Types
, respectively.
Optionally verify the subject (recipient):
Note
This step is optional, but
RECOMMENDED
when the ClrCredential has been exchanged with the verifier as one of the
4.
CLR Standard Document Formats
A ClrCredential is about a person called the recipient. The recipient is identified in the
credentialSubject
(see
ClrSubject
) 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 id 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
8.2
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 nested verifiable credentials:
A ClrCredential usually contains nested verifiable credentials in the
credentialSubject
. A ClrCredential may also contain nested EndorsementCredentials. If the nested verifiable credential has a
type
of "AchievementCredential" or "OpenBadgeCredential", verify the nested credential as shown in section "OpenBadgeCredential Verification" of the
Open Badges Specification v3.0
. If the nested verifiable credential has a
type
of "EndorsementCredential", verify the nested credential as shown in section "EndorsementCredential Verification" of the
Open Badges Specification v3.0
If all the above steps pass, the ClrCredential may be treated as verified.
8.2
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.
9.
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
ClrCredential
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.
9.1
Examples
9.1.1
Equality
Credentials
and
are equal since they have the same
id
and the same
issuer.id
Example
29
: Sample Credential A
Credential
Verifiable Credential (with proof)
Verifiable Credential (as JWT)
"@context"
"https://www.w3.org/ns/credentials/v2"
"https://purl.imsglobal.org/spec/clr/v2p0/context-2.0.1.json"
"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"
"ClrCredential"
"issuer"
"id"
"https://example.edu/issuers/565049"
"type"
"Profile"
"name"
"Example University"
"validFrom"
"2010-01-01T00:00:00Z"
"name"
"Sample Transcript"
"credentialSubject"
"id"
"did:example:ebfeb1f712ebc6f1c276e12ec21"
"type"
"ClrSubject"
"verifiableCredential"
"@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"
"urn:uuid:91537dba-56cb-11ec-bf63-0242ac130002"
"type"
"VerifiableCredential"
"AchievementCredential"
"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"
"urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002"
"type"
"Achievement"
"creator"
"id"
"https://example.edu/issuers/565049"
"type"
"Profile"
"name"
"Achievement 1"
"criteria"
"id"
"https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac130002/criteria"
"description"
"Achievement 1"
"image"
"id"
"https://example.edu/achievements/sample.png"
"type"
"Image"
"credentialSchema"
"id"
"https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_clrcredential_schema.json"
"type"
"1EdTechJsonSchemaValidator2019"
"achievement"
"id"
"urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002"
"type"
"Achievement"
"creator"
"id"
"https://example.edu/issuers/565049"
"type"
"Profile"
"name"
"Achievement 1"
"criteria"
"id"
"https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac130002/criteria"
"description"
"Achievement 1"
"image"
"id"
"https://example.edu/achievements/sample.png"
"type"
"Image"
"id"
"urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
"type"
"Achievement"
"creator"
"id"
"https://example.edu/issuers/565049"
"type"
"Profile"
"name"
"Achievement 2"
"criteria"
"id"
"https://example.edu/achievements/dd887f0a-56cb-11ec-bf63-0242ac130002/criteria"
"description"
"Achievement 2"
"image"
"id"
"https://example.edu/achievements/sample.png"
"type"
"Image"
"association"
"type"
"Association"
"associationType"
"isParentOf"
"sourceId"
"urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002"
"targetId"
"urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
"credentialSchema"
"id"
"https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_achievementcredential_schema.json"
"type"
"1EdTechJsonSchemaValidator2019"
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/clr/v2p0/context-2.0.1.json",
"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",
"ClrCredential"
],
"issuer": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
],
"name": "Example University"
},
"validFrom": "2010-01-01T00:00:00Z",
"name": "Sample Transcript",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"type": [
"ClrSubject"
],
"verifiableCredential": [
"@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": "urn:uuid:91537dba-56cb-11ec-bf63-0242ac130002",
"type": [
"VerifiableCredential",
"AchievementCredential"
],
"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": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 1",
"criteria": {
"id": "https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac130002/criteria"
},
"description": "Achievement 1",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
},
"credentialSchema": [
"id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_clrcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
],
"proof": [
"type": "DataIntegrityProof",
"created": "2025-12-19T08:28:49Z",
"verificationMethod": "https://example.edu/issuers/565049#z6Mkjiro8LyB8SzRerGZiFjW1xRmMrPmrBVa7RNbsU8ui1Xi",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z2c9FWisHeErLL4v8HKnfvTDjqBWnfHXsy3xNDpJTHe7vBYcv3yxRorRdtPwZZJJ94nqqCdWDyaiUaHFjkYoTByzC"
],
"achievement": [
"id": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 1",
"criteria": {
"id": "https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac130002/criteria"
},
"description": "Achievement 1",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
},
"id": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 2",
"criteria": {
"id": "https://example.edu/achievements/dd887f0a-56cb-11ec-bf63-0242ac130002/criteria"
},
"description": "Achievement 2",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
],
"association": [
"type": "Association",
"associationType": "isParentOf",
"sourceId": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"targetId": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
},
"credentialSchema": [
"id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_achievementcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
],
"proof": [
"type": "DataIntegrityProof",
"created": "2025-12-19T08:28:50Z",
"verificationMethod": "https://example.edu/issuers/565049#z6Mkjiro8LyB8SzRerGZiFjW1xRmMrPmrBVa7RNbsU8ui1Xi",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z3jdhGczYwxkLYzdNRzdR76ruYWsYT9UPCitLyaHtCWQGRDV6BwgDWoAHVUNG5Q1WiVekFWgiieXmQoRGAyEUA9hY"
---------------- JWT header ---------------
"alg": "RS256",
"typ": "JWT",
"jwk": {
"e": "AQAB",
"kty": "RSA",
"n": "17j59ESR7ujM7YTxhYW3BegLZXP-Y0CfhiTt3KcLeQ4hpNYILG6Ez755imAmlmMhraE82V
aCU6duxeYpq4jQcfGQtiCB1c9Jy3n7GRPfeS76Fjs4GbTVpua6q1nHudSxhtl7CyoI1drffkJzLLApCE
pj1eRR8bbLnTkKq5uOQ3LVAyuL1RBJxQp_nVwTjVkivR_aaMNhwbrdJkxhDodfsguEi36wKaTyXdxicS
munVjZlUJSDb1URKPEZ0Xj6AzGrqYnl6YwyQoszxdP_vzA5-rVtEsJ9rarM_rv0VpNFDK3MMcnsesO_C
JYIMb1qTyZN856oCvUmK7aUVjdzxtUpw"
--------------- 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/clr/v2p0/context-2.0.1.json",
"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",
"ClrCredential"
],
"issuer": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
],
"name": "Example University"
},
"validFrom": "2010-01-01T00:00:00Z",
"name": "Sample Transcript",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"type": [
"ClrSubject"
],
"verifiableCredential": [
"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6IlJTQ
SIsIm4iOiIxN2o1OUVTUjd1ak03WVR4aFlXM0JlZ0xaWFAtWTBDZmhpVHQzS2NMZVE0aHBOWUlMRzZFe
jc1NWltQW1sbU1ocmFFODJWYUNVNmR1eGVZcHE0alFjZkdRdGlDQjFjOUp5M243R1JQZmVTNzZGanM0R
2JUVnB1YTZxMW5IdWRTeGh0bDdDeW9JMWRyZmZrSnpMTEFwQ0VwajFlUlI4YmJMblRrS3E1dU9RM0xWQ
Xl1TDFSQkp4UXBfblZ3VGpWa2l2Ul9hYU1OaHdicmRKa3hoRG9kZnNndUVpMzZ3S2FUeVhkeGljU211b
lZqWmxVSlNEYjFVUktQRVowWGo2QXpHcnFZbmw2WXd5UW9zenhkUF92ekE1LXJWdEVzSjlyYXJNX3J2M
FZwTkZESzNNTWNuc2VzT19DSllJTWIxcVR5Wk44NTZvQ3ZVbUs3YVVWamR6eHRVcHcifX0.eyJAY29ud
GV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwua
W1zZ2xvYmFsLm9yZy9zcGVjL29iL3YzcDAvY29udGV4dC0zLjAuMy5qc29uIiwiaHR0cHM6Ly9wdXJsL
mltc2dsb2JhbC5vcmcvc3BlYy9vYi92M3AwL2V4dGVuc2lvbnMuanNvbiJdLCJpZCI6InVybjp1dWlkO
jkxNTM3ZGJhLTU2Y2ItMTFlYy1iZjYzLTAyNDJhYzEzMDAwMiIsInR5cGUiOlsiVmVyaWZpYWJsZUNyZ
WRlbnRpYWwiLCJBY2hpZXZlbWVudENyZWRlbnRpYWwiXSwiaXNzdWVyIjp7ImlkIjoiaHR0cHM6Ly9le
GFtcGxlLmVkdS9pc3N1ZXJzLzU2NTA0OSIsInR5cGUiOlsiUHJvZmlsZSJdLCJuYW1lIjoiRXhhbXBsZ
SBVbml2ZXJzaXR5In0sInZhbGlkRnJvbSI6IjIwMTAtMDEtMDFUMDA6MDA6MDBaIiwibmFtZSI6IkV4Y
W1wbGUgVW5pdmVyc2l0eSBEZWdyZWUiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDpleGFtc
GxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMyMSIsInR5cGUiOlsiQWNoaWV2ZW1lbnRTdWJqZWN0I
l0sImFjaGlldmVtZW50Ijp7ImlkIjoidXJuOnV1aWQ6YTc0NjdlZjYtNTZjYi0xMWVjLWJmNjMtMDI0M
mFjMTMwMDAyIiwidHlwZSI6WyJBY2hpZXZlbWVudCJdLCJjcmVhdG9yIjp7ImlkIjoiaHR0cHM6Ly9le
GFtcGxlLmVkdS9pc3N1ZXJzLzU2NTA0OSIsInR5cGUiOlsiUHJvZmlsZSJdfSwibmFtZSI6IkFjaGlld
mVtZW50IDEiLCJjcml0ZXJpYSI6eyJpZCI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvYWNoaWV2ZW1lbnRzL
2E3NDY3ZWY2LTU2Y2ItMTFlYy1iZjYzLTAyNDJhYzEzMDAwMi9jcml0ZXJpYSJ9LCJkZXNjcmlwdGlvb
iI6IkFjaGlldmVtZW50IDEiLCJpbWFnZSI6eyJpZCI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvYWNoaWV2Z
W1lbnRzL3NhbXBsZS5wbmciLCJ0eXBlIjoiSW1hZ2UifX19LCJjcmVkZW50aWFsU2NoZW1hIjpbeyJpZ
CI6Imh0dHBzOi8vcHVybC5pbXNnbG9iYWwub3JnL3NwZWMvY2xyL3YycDAvc2NoZW1hL2pzb24vY2xyX
3YycDBfY2xyY3JlZGVudGlhbF9zY2hlbWEuanNvbiIsInR5cGUiOiIxRWRUZWNoSnNvblNjaGVtYVZhb
GlkYXRvcjIwMTkifV0sImlzcyI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvaXNzdWVycy81NjUwNDkiLCJqd
GkiOiJ1cm46dXVpZDo5MTUzN2RiYS01NmNiLTExZWMtYmY2My0wMjQyYWMxMzAwMDIiLCJzdWIiOiJka
WQ6ZXhhbXBsZTplYmZlYjFmNzEyZWJjNmYxYzI3NmUxMmVjMjEifQ.MAkGDFh4cHndTaYvVvGu2ojk3I
rsqSO6NjvKxXzP2dRfgNS7fnFmHRiqoWNoM3RKtprc-G6_RrrLjlXqYb8vAtj8KC3Sg8ZuYiyJmn63y-
P02nn5-u9_sGiM2tP9EkQazd1GjBqjgioW08IFKzT9PxVOvUAcaJZr6Hj1JG4mb20Brpj5ylsa9XAD_i
rTesa-ReR49d8bMsT7J2n1rG15rLJtuwwAT1lfwrvOdoRGAwsqh4L5kx4MUof_n-50HXLQBu07quWAZt
iz3isyoemtWPcuTHV5Y7smcv01ulDRyuDsncQJ7-Ra1ltMpezbgpoMFQbKGeXfD0eq9BjZ4dNVug"
],
"achievement": [
"id": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 1",
"criteria": {
"id": "https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac
130002/criteria"
},
"description": "Achievement 1",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
},
"id": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 2",
"criteria": {
"id": "https://example.edu/achievements/dd887f0a-56cb-11ec-bf63-0242ac
130002/criteria"
},
"description": "Achievement 2",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
],
"association": [
"type": "Association",
"associationType": "isParentOf",
"sourceId": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"targetId": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
},
"credentialSchema": [
"id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_achie
vementcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
],
"iss": "https://example.edu/issuers/565049",
"jti": "http://example.edu/credentials/3732",
"sub": "did:example:ebfeb1f712ebc6f1c276e12ec21"
--------------- JWT ---------------
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6IlJTQSIsIm4i
OiIxN2o1OUVTUjd1ak03WVR4aFlXM0JlZ0xaWFAtWTBDZmhpVHQzS2NMZVE0aHBOWUlMRzZFejc1NWlt
QW1sbU1ocmFFODJWYUNVNmR1eGVZcHE0alFjZkdRdGlDQjFjOUp5M243R1JQZmVTNzZGanM0R2JUVnB1
YTZxMW5IdWRTeGh0bDdDeW9JMWRyZmZrSnpMTEFwQ0VwajFlUlI4YmJMblRrS3E1dU9RM0xWQXl1TDFS
Qkp4UXBfblZ3VGpWa2l2Ul9hYU1OaHdicmRKa3hoRG9kZnNndUVpMzZ3S2FUeVhkeGljU211blZqWmxV
SlNEYjFVUktQRVowWGo2QXpHcnFZbmw2WXd5UW9zenhkUF92ekE1LXJWdEVzSjlyYXJNX3J2MFZwTkZE
SzNNTWNuc2VzT19DSllJTWIxcVR5Wk44NTZvQ3ZVbUs3YVVWamR6eHRVcHcifX0.eyJAY29udGV4dCI6
WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwuaW1zZ2xv
YmFsLm9yZy9zcGVjL2Nsci92MnAwL2NvbnRleHQtMi4wLjEuanNvbiIsImh0dHBzOi8vcHVybC5pbXNn
bG9iYWwub3JnL3NwZWMvb2IvdjNwMC9jb250ZXh0LTMuMC4zLmpzb24iLCJodHRwczovL3B1cmwuaW1z
Z2xvYmFsLm9yZy9zcGVjL29iL3YzcDAvZXh0ZW5zaW9ucy5qc29uIl0sImlkIjoiaHR0cDovL2V4YW1w
bGUuZWR1L2NyZWRlbnRpYWxzLzM3MzIiLCJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiQ2xy
Q3JlZGVudGlhbCJdLCJpc3N1ZXIiOnsiaWQiOiJodHRwczovL2V4YW1wbGUuZWR1L2lzc3VlcnMvNTY1
MDQ5IiwidHlwZSI6WyJQcm9maWxlIl0sIm5hbWUiOiJFeGFtcGxlIFVuaXZlcnNpdHkifSwidmFsaWRG
cm9tIjoiMjAxMC0wMS0wMVQwMDowMDowMFoiLCJuYW1lIjoiU2FtcGxlIFRyYW5zY3JpcHQiLCJjcmVk
ZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMy
MSIsInR5cGUiOlsiQ2xyU3ViamVjdCJdLCJ2ZXJpZmlhYmxlQ3JlZGVudGlhbCI6WyJleUpoYkdjaU9p
SlNVekkxTmlJc0luUjVjQ0k2SWtwWFZDSXNJbXAzYXlJNmV5SmxJam9pUVZGQlFpSXNJbXQwZVNJNkls
SlRRU0lzSW00aU9pSXhOMm8xT1VWVFVqZDFhazAzV1ZSNGFGbFhNMEpsWjB4YVdGQXRXVEJEWm1ocFZI
UXpTMk5NWlZFMGFIQk9XVWxNUnpaRmVqYzFOV2x0UVcxc2JVMW9jbUZGT0RKV1lVTlZObVIxZUdWWmNI
RTBhbEZqWmtkUmRHbERRakZqT1VwNU0yNDNSMUpRWm1WVE56Wkdhbk0wUjJKVVZuQjFZVFp4TVc1SWRX
UlRlR2gwYkRkRGVXOUpNV1J5Wm1aclNucE1URUZ3UTBWd2FqRmxVbEk0WW1KTWJsUnJTM0UxZFU5Uk0w
eFdRWGwxVERGU1FrcDRVWEJmYmxaM1ZHcFdhMmwyVWw5aFlVMU9hSGRpY21SS2EzaG9SRzlrWm5ObmRV
VnBNelozUzJGVWVWaGtlR2xqVTIxMWJsWnFXbXhWU2xORVlqRlZVa3RRUlZvd1dHbzJRWHBIY25GWmJt
dzJXWGQ1VVc5emVuaGtVRjkyZWtFMUxYSldkRVZ6U2pseVlYSk5YM0oyTUZad1RrWkVTek5OVFdOdWMy
VnpUMTlEU2xsSlRXSXhjVlI1V2s0NE5UWnZRM1pWYlVzM1lWVldhbVI2ZUhSVmNIY2lmWDAuZXlKQVky
OXVkR1Y0ZENJNld5Sm9kSFJ3Y3pvdkwzZDNkeTUzTXk1dmNtY3Zibk12WTNKbFpHVnVkR2xoYkhNdmRq
SWlMQ0pvZEhSd2N6b3ZMM0IxY213dWFXMXpaMnh2WW1Gc0xtOXlaeTl6Y0dWakwyOWlMM1l6Y0RBdlky
OXVkR1Y0ZEMwekxqQXVNeTVxYzI5dUlpd2lhSFIwY0hNNkx5OXdkWEpzTG1sdGMyZHNiMkpoYkM1dmNt
Y3ZjM0JsWXk5dllpOTJNM0F3TDJWNGRHVnVjMmx2Ym5NdWFuTnZiaUpkTENKcFpDSTZJblZ5YmpwMWRX
bGtPamt4TlRNM1pHSmhMVFUyWTJJdE1URmxZeTFpWmpZekxUQXlOREpoWXpFek1EQXdNaUlzSW5SNWNH
VWlPbHNpVm1WeWFXWnBZV0pzWlVOeVpXUmxiblJwWVd3aUxDSkJZMmhwWlhabGJXVnVkRU55WldSbGJu
UnBZV3dpWFN3aWFYTnpkV1Z5SWpwN0ltbGtJam9pYUhSMGNITTZMeTlsZUdGdGNHeGxMbVZrZFM5cGMz
TjFaWEp6THpVMk5UQTBPU0lzSW5SNWNHVWlPbHNpVUhKdlptbHNaU0pkTENKdVlXMWxJam9pUlhoaGJY
QnNaU0JWYm1sMlpYSnphWFI1SW4wc0luWmhiR2xrUm5KdmJTSTZJakl3TVRBdE1ERXRNREZVTURBNk1E
QTZNREJhSWl3aWJtRnRaU0k2SWtWNFlXMXdiR1VnVlc1cGRtVnljMmwwZVNCRVpXZHlaV1VpTENKamNt
VmtaVzUwYVdGc1UzVmlhbVZqZENJNmV5SnBaQ0k2SW1ScFpEcGxlR0Z0Y0d4bE9tVmlabVZpTVdZM01U
SmxZbU0yWmpGak1qYzJaVEV5WldNeU1TSXNJblI1Y0dVaU9sc2lRV05vYVdWMlpXMWxiblJUZFdKcVpX
TjBJbDBzSW1GamFHbGxkbVZ0Wlc1MElqcDdJbWxrSWpvaWRYSnVPblYxYVdRNllUYzBOamRsWmpZdE5U
WmpZaTB4TVdWakxXSm1Oak10TURJME1tRmpNVE13TURBeUlpd2lkSGx3WlNJNld5SkJZMmhwWlhabGJX
VnVkQ0pkTENKamNtVmhkRzl5SWpwN0ltbGtJam9pYUhSMGNITTZMeTlsZUdGdGNHeGxMbVZrZFM5cGMz
TjFaWEp6THpVMk5UQTBPU0lzSW5SNWNHVWlPbHNpVUhKdlptbHNaU0pkZlN3aWJtRnRaU0k2SWtGamFH
bGxkbVZ0Wlc1MElERWlMQ0pqY21sMFpYSnBZU0k2ZXlKcFpDSTZJbWgwZEhCek9pOHZaWGhoYlhCc1pT
NWxaSFV2WVdOb2FXVjJaVzFsYm5SekwyRTNORFkzWldZMkxUVTJZMkl0TVRGbFl5MWlaall6TFRBeU5E
SmhZekV6TURBd01pOWpjbWwwWlhKcFlTSjlMQ0prWlhOamNtbHdkR2x2YmlJNklrRmphR2xsZG1WdFpX
NTBJREVpTENKcGJXRm5aU0k2ZXlKcFpDSTZJbWgwZEhCek9pOHZaWGhoYlhCc1pTNWxaSFV2WVdOb2FX
VjJaVzFsYm5SekwzTmhiWEJzWlM1d2JtY2lMQ0owZVhCbElqb2lTVzFoWjJVaWZYMTlMQ0pqY21Wa1pX
NTBhV0ZzVTJOb1pXMWhJanBiZXlKcFpDSTZJbWgwZEhCek9pOHZjSFZ5YkM1cGJYTm5iRzlpWVd3dWIz
Sm5MM053WldNdlkyeHlMM1l5Y0RBdmMyTm9aVzFoTDJwemIyNHZZMnh5WDNZeWNEQmZZMnh5WTNKbFpH
VnVkR2xoYkY5elkyaGxiV0V1YW5OdmJpSXNJblI1Y0dVaU9pSXhSV1JVWldOb1NuTnZibE5qYUdWdFlW
WmhiR2xrWVhSdmNqSXdNVGtpZlYwc0ltbHpjeUk2SW1oMGRIQnpPaTh2WlhoaGJYQnNaUzVsWkhVdmFY
TnpkV1Z5Y3k4MU5qVXdORGtpTENKcWRHa2lPaUoxY200NmRYVnBaRG81TVRVek4yUmlZUzAxTm1OaUxU
RXhaV010WW1ZMk15MHdNalF5WVdNeE16QXdNRElpTENKemRXSWlPaUprYVdRNlpYaGhiWEJzWlRwbFlt
WmxZakZtTnpFeVpXSmpObVl4WXpJM05tVXhNbVZqTWpFaWZRLk1Ba0dERmg0Y0huZFRhWXZWdkd1Mm9q
azNJcnNxU082Tmp2S3hYelAyZFJmZ05TN2ZuRm1IUmlxb1dOb00zUkt0cHJjLUc2X1JyckxqbFhxWWI4
dkF0ajhLQzNTZzhadVlpeUptbjYzeS1QMDJubjUtdTlfc0dpTTJ0UDlFa1FhemQxR2pCcWpnaW9XMDhJ
Rkt6VDlQeFZPdlVBY2FKWnI2SGoxSkc0bWIyMEJycGo1eWxzYTlYQURfaXJUZXNhLVJlUjQ5ZDhiTXNU
N0oybjFyRzE1ckxKdHV3d0FUMWxmd3J2T2RvUkdBd3NxaDRMNWt4NE1Vb2Zfbi01MEhYTFFCdTA3cXVX
QVp0aXozaXN5b2VtdFdQY3VUSFY1WTdzbWN2MDF1bERSeXVEc25jUUo3LVJhMWx0TXBlemJncG9NRlFi
S0dlWGZEMGVxOUJqWjRkTlZ1ZyJdLCJhY2hpZXZlbWVudCI6W3siaWQiOiJ1cm46dXVpZDphNzQ2N2Vm
Ni01NmNiLTExZWMtYmY2My0wMjQyYWMxMzAwMDIiLCJ0eXBlIjpbIkFjaGlldmVtZW50Il0sImNyZWF0
b3IiOnsiaWQiOiJodHRwczovL2V4YW1wbGUuZWR1L2lzc3VlcnMvNTY1MDQ5IiwidHlwZSI6WyJQcm9m
aWxlIl19LCJuYW1lIjoiQWNoaWV2ZW1lbnQgMSIsImNyaXRlcmlhIjp7ImlkIjoiaHR0cHM6Ly9leGFt
cGxlLmVkdS9hY2hpZXZlbWVudHMvYTc0NjdlZjYtNTZjYi0xMWVjLWJmNjMtMDI0MmFjMTMwMDAyL2Ny
aXRlcmlhIn0sImRlc2NyaXB0aW9uIjoiQWNoaWV2ZW1lbnQgMSIsImltYWdlIjp7ImlkIjoiaHR0cHM6
Ly9leGFtcGxlLmVkdS9hY2hpZXZlbWVudHMvc2FtcGxlLnBuZyIsInR5cGUiOiJJbWFnZSJ9fSx7Imlk
IjoidXJuOnV1aWQ6ZGQ4ODdmMGEtNTZjYi0xMWVjLWJmNjMtMDI0MmFjMTMwMDAyIiwidHlwZSI6WyJB
Y2hpZXZlbWVudCJdLCJjcmVhdG9yIjp7ImlkIjoiaHR0cHM6Ly9leGFtcGxlLmVkdS9pc3N1ZXJzLzU2
NTA0OSIsInR5cGUiOlsiUHJvZmlsZSJdfSwibmFtZSI6IkFjaGlldmVtZW50IDIiLCJjcml0ZXJpYSI6
eyJpZCI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvYWNoaWV2ZW1lbnRzL2RkODg3ZjBhLTU2Y2ItMTFlYy1i
ZjYzLTAyNDJhYzEzMDAwMi9jcml0ZXJpYSJ9LCJkZXNjcmlwdGlvbiI6IkFjaGlldmVtZW50IDIiLCJp
bWFnZSI6eyJpZCI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvYWNoaWV2ZW1lbnRzL3NhbXBsZS5wbmciLCJ0
eXBlIjoiSW1hZ2UifX1dLCJhc3NvY2lhdGlvbiI6W3sidHlwZSI6IkFzc29jaWF0aW9uIiwiYXNzb2Np
YXRpb25UeXBlIjoiaXNQYXJlbnRPZiIsInNvdXJjZUlkIjoidXJuOnV1aWQ6YTc0NjdlZjYtNTZjYi0x
MWVjLWJmNjMtMDI0MmFjMTMwMDAyIiwidGFyZ2V0SWQiOiJ1cm46dXVpZDpkZDg4N2YwYS01NmNiLTEx
ZWMtYmY2My0wMjQyYWMxMzAwMDIifV19LCJjcmVkZW50aWFsU2NoZW1hIjpbeyJpZCI6Imh0dHBzOi8v
cHVybC5pbXNnbG9iYWwub3JnL3NwZWMvY2xyL3YycDAvc2NoZW1hL2pzb24vY2xyX3YycDBfYWNoaWV2
ZW1lbnRjcmVkZW50aWFsX3NjaGVtYS5qc29uIiwidHlwZSI6IjFFZFRlY2hKc29uU2NoZW1hVmFsaWRh
dG9yMjAxOSJ9XSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmVkdS9pc3N1ZXJzLzU2NTA0OSIsImp0aSI6
Imh0dHA6Ly9leGFtcGxlLmVkdS9jcmVkZW50aWFscy8zNzMyIiwic3ViIjoiZGlkOmV4YW1wbGU6ZWJm
ZWIxZjcxMmViYzZmMWMyNzZlMTJlYzIxIn0.EW9bAM3vb6sP3i4H-VoQS2VquIN_KTm0azveP_HBConG
BZQ94CGo0njRi1dZy_yrMMnKH6FYbaQgO4WfD4Njj2DK2g6jgD6AvTKunVlLM7WjqbD2YIFjOArpdncq
W3-LnWAKBOmvUe3obbiYCE2-HNJ6SphPILvgmJUTxCXwsf4TV2ANk3LHRj5mFGSTQywg_Er2fx_UJiAL
jrRUHFwDf8iOFapfEJ4VFyV-bLbABZhmGl6aZ1hU4iNPl76_0euRrw9snNrKFS-Ze-ehAzMw7kukofyn
gtLTzXB02ixyxurJ-d6G-0Y9CjvgqpT7ibZjh7cIvQCDyPC2WF_bNDytHw
Example
30
: Sample Credential B
Credential
Verifiable Credential (with proof)
Verifiable Credential (as JWT)
"@context"
"https://www.w3.org/ns/credentials/v2"
"https://purl.imsglobal.org/spec/clr/v2p0/context-2.0.1.json"
"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"
"ClrCredential"
"issuer"
"id"
"https://example.edu/issuers/565049"
"type"
"Profile"
"name"
"Example University"
"validFrom"
"2010-01-01T00:00:00Z"
"name"
"Sample Transcript"
"credentialSubject"
"id"
"did:example:ebfeb1f712ebc6f1c276e12ec21"
"type"
"ClrSubject"
"verifiableCredential"
"@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"
"urn:uuid:91537dba-56cb-11ec-bf63-0242ac130002"
"type"
"VerifiableCredential"
"AchievementCredential"
"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"
"urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002"
"type"
"Achievement"
"creator"
"id"
"https://example.edu/issuers/565049"
"type"
"Profile"
"name"
"Achievement 1"
"criteria"
"id"
"https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac130002/criteria"
"description"
"Achievement 1"
"image"
"id"
"https://example.edu/achievements/sample.png"
"type"
"Image"
"credentialSchema"
"id"
"https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_clrcredential_schema.json"
"type"
"1EdTechJsonSchemaValidator2019"
"achievement"
"id"
"urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002"
"type"
"Achievement"
"creator"
"id"
"https://example.edu/issuers/565049"
"type"
"Profile"
"name"
"Achievement 1"
"criteria"
"id"
"https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac130002/criteria"
"description"
"Achievement 1"
"image"
"id"
"https://example.edu/achievements/sample.png"
"type"
"Image"
"id"
"urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
"type"
"Achievement"
"creator"
"id"
"https://example.edu/issuers/565049"
"type"
"Profile"
"name"
"Achievement 2"
"criteria"
"id"
"https://example.edu/achievements/dd887f0a-56cb-11ec-bf63-0242ac130002/criteria"
"description"
"Achievement 2"
"image"
"id"
"https://example.edu/achievements/sample.png"
"type"
"Image"
"association"
"type"
"Association"
"associationType"
"isParentOf"
"sourceId"
"urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002"
"targetId"
"urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
"credentialSchema"
"id"
"https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_achievementcredential_schema.json"
"type"
"1EdTechJsonSchemaValidator2019"
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/clr/v2p0/context-2.0.1.json",
"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",
"ClrCredential"
],
"issuer": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
],
"name": "Example University"
},
"validFrom": "2010-01-01T00:00:00Z",
"name": "Sample Transcript",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"type": [
"ClrSubject"
],
"verifiableCredential": [
"@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": "urn:uuid:91537dba-56cb-11ec-bf63-0242ac130002",
"type": [
"VerifiableCredential",
"AchievementCredential"
],
"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": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 1",
"criteria": {
"id": "https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac130002/criteria"
},
"description": "Achievement 1",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
},
"credentialSchema": [
"id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_clrcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
],
"proof": [
"type": "DataIntegrityProof",
"created": "2025-12-19T08:28:50Z",
"verificationMethod": "https://example.edu/issuers/565049#z6Mkjiro8LyB8SzRerGZiFjW1xRmMrPmrBVa7RNbsU8ui1Xi",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z5gk5shGEFNhFeVtW6SNF4uAQWsBgAgye3JT2gVWE7dvdTdujX4LPQpyJZYKaXeJAB8xVBj1vYmV31Va1bowxXZYf"
],
"achievement": [
"id": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 1",
"criteria": {
"id": "https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac130002/criteria"
},
"description": "Achievement 1",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
},
"id": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 2",
"criteria": {
"id": "https://example.edu/achievements/dd887f0a-56cb-11ec-bf63-0242ac130002/criteria"
},
"description": "Achievement 2",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
],
"association": [
"type": "Association",
"associationType": "isParentOf",
"sourceId": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"targetId": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
},
"credentialSchema": [
"id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_achievementcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
],
"proof": [
"type": "DataIntegrityProof",
"created": "2025-12-19T08:28:50Z",
"verificationMethod": "https://example.edu/issuers/565049#z6Mkjiro8LyB8SzRerGZiFjW1xRmMrPmrBVa7RNbsU8ui1Xi",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z2AMJowdS5Eu8y7X2zEcMG92wakWXzVByjy6qjE8rHEVrHMtYKTAyf23k27uTxRYNZG1MQfYfQvYzfwxc8aRErEm5"
---------------- JWT header ---------------
"alg": "RS256",
"typ": "JWT",
"jwk": {
"e": "AQAB",
"kty": "RSA",
"n": "17j59ESR7ujM7YTxhYW3BegLZXP-Y0CfhiTt3KcLeQ4hpNYILG6Ez755imAmlmMhraE82V
aCU6duxeYpq4jQcfGQtiCB1c9Jy3n7GRPfeS76Fjs4GbTVpua6q1nHudSxhtl7CyoI1drffkJzLLApCE
pj1eRR8bbLnTkKq5uOQ3LVAyuL1RBJxQp_nVwTjVkivR_aaMNhwbrdJkxhDodfsguEi36wKaTyXdxicS
munVjZlUJSDb1URKPEZ0Xj6AzGrqYnl6YwyQoszxdP_vzA5-rVtEsJ9rarM_rv0VpNFDK3MMcnsesO_C
JYIMb1qTyZN856oCvUmK7aUVjdzxtUpw"
--------------- 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/clr/v2p0/context-2.0.1.json",
"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",
"ClrCredential"
],
"issuer": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
],
"name": "Example University"
},
"validFrom": "2010-01-01T00:00:00Z",
"name": "Sample Transcript",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"type": [
"ClrSubject"
],
"verifiableCredential": [
"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6IlJTQ
SIsIm4iOiIxN2o1OUVTUjd1ak03WVR4aFlXM0JlZ0xaWFAtWTBDZmhpVHQzS2NMZVE0aHBOWUlMRzZFe
jc1NWltQW1sbU1ocmFFODJWYUNVNmR1eGVZcHE0alFjZkdRdGlDQjFjOUp5M243R1JQZmVTNzZGanM0R
2JUVnB1YTZxMW5IdWRTeGh0bDdDeW9JMWRyZmZrSnpMTEFwQ0VwajFlUlI4YmJMblRrS3E1dU9RM0xWQ
Xl1TDFSQkp4UXBfblZ3VGpWa2l2Ul9hYU1OaHdicmRKa3hoRG9kZnNndUVpMzZ3S2FUeVhkeGljU211b
lZqWmxVSlNEYjFVUktQRVowWGo2QXpHcnFZbmw2WXd5UW9zenhkUF92ekE1LXJWdEVzSjlyYXJNX3J2M
FZwTkZESzNNTWNuc2VzT19DSllJTWIxcVR5Wk44NTZvQ3ZVbUs3YVVWamR6eHRVcHcifX0.eyJAY29ud
GV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwua
W1zZ2xvYmFsLm9yZy9zcGVjL29iL3YzcDAvY29udGV4dC0zLjAuMy5qc29uIiwiaHR0cHM6Ly9wdXJsL
mltc2dsb2JhbC5vcmcvc3BlYy9vYi92M3AwL2V4dGVuc2lvbnMuanNvbiJdLCJpZCI6InVybjp1dWlkO
jkxNTM3ZGJhLTU2Y2ItMTFlYy1iZjYzLTAyNDJhYzEzMDAwMiIsInR5cGUiOlsiVmVyaWZpYWJsZUNyZ
WRlbnRpYWwiLCJBY2hpZXZlbWVudENyZWRlbnRpYWwiXSwiaXNzdWVyIjp7ImlkIjoiaHR0cHM6Ly9le
GFtcGxlLmVkdS9pc3N1ZXJzLzU2NTA0OSIsInR5cGUiOlsiUHJvZmlsZSJdLCJuYW1lIjoiRXhhbXBsZ
SBVbml2ZXJzaXR5In0sInZhbGlkRnJvbSI6IjIwMTAtMDEtMDFUMDA6MDA6MDBaIiwibmFtZSI6IkV4Y
W1wbGUgVW5pdmVyc2l0eSBEZWdyZWUiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDpleGFtc
GxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMyMSIsInR5cGUiOlsiQWNoaWV2ZW1lbnRTdWJqZWN0I
l0sImFjaGlldmVtZW50Ijp7ImlkIjoidXJuOnV1aWQ6YTc0NjdlZjYtNTZjYi0xMWVjLWJmNjMtMDI0M
mFjMTMwMDAyIiwidHlwZSI6WyJBY2hpZXZlbWVudCJdLCJjcmVhdG9yIjp7ImlkIjoiaHR0cHM6Ly9le
GFtcGxlLmVkdS9pc3N1ZXJzLzU2NTA0OSIsInR5cGUiOlsiUHJvZmlsZSJdfSwibmFtZSI6IkFjaGlld
mVtZW50IDEiLCJjcml0ZXJpYSI6eyJpZCI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvYWNoaWV2ZW1lbnRzL
2E3NDY3ZWY2LTU2Y2ItMTFlYy1iZjYzLTAyNDJhYzEzMDAwMi9jcml0ZXJpYSJ9LCJkZXNjcmlwdGlvb
iI6IkFjaGlldmVtZW50IDEiLCJpbWFnZSI6eyJpZCI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvYWNoaWV2Z
W1lbnRzL3NhbXBsZS5wbmciLCJ0eXBlIjoiSW1hZ2UifX19LCJjcmVkZW50aWFsU2NoZW1hIjpbeyJpZ
CI6Imh0dHBzOi8vcHVybC5pbXNnbG9iYWwub3JnL3NwZWMvY2xyL3YycDAvc2NoZW1hL2pzb24vY2xyX
3YycDBfY2xyY3JlZGVudGlhbF9zY2hlbWEuanNvbiIsInR5cGUiOiIxRWRUZWNoSnNvblNjaGVtYVZhb
GlkYXRvcjIwMTkifV0sImlzcyI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvaXNzdWVycy81NjUwNDkiLCJqd
GkiOiJ1cm46dXVpZDo5MTUzN2RiYS01NmNiLTExZWMtYmY2My0wMjQyYWMxMzAwMDIiLCJzdWIiOiJka
WQ6ZXhhbXBsZTplYmZlYjFmNzEyZWJjNmYxYzI3NmUxMmVjMjEifQ.MAkGDFh4cHndTaYvVvGu2ojk3I
rsqSO6NjvKxXzP2dRfgNS7fnFmHRiqoWNoM3RKtprc-G6_RrrLjlXqYb8vAtj8KC3Sg8ZuYiyJmn63y-
P02nn5-u9_sGiM2tP9EkQazd1GjBqjgioW08IFKzT9PxVOvUAcaJZr6Hj1JG4mb20Brpj5ylsa9XAD_i
rTesa-ReR49d8bMsT7J2n1rG15rLJtuwwAT1lfwrvOdoRGAwsqh4L5kx4MUof_n-50HXLQBu07quWAZt
iz3isyoemtWPcuTHV5Y7smcv01ulDRyuDsncQJ7-Ra1ltMpezbgpoMFQbKGeXfD0eq9BjZ4dNVug"
],
"achievement": [
"id": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 1",
"criteria": {
"id": "https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac
130002/criteria"
},
"description": "Achievement 1",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
},
"id": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 2",
"criteria": {
"id": "https://example.edu/achievements/dd887f0a-56cb-11ec-bf63-0242ac
130002/criteria"
},
"description": "Achievement 2",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
],
"association": [
"type": "Association",
"associationType": "isParentOf",
"sourceId": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"targetId": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
},
"credentialSchema": [
"id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_achie
vementcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
],
"iss": "https://example.edu/issuers/565049",
"jti": "http://example.edu/credentials/3732",
"sub": "did:example:ebfeb1f712ebc6f1c276e12ec21"
--------------- JWT ---------------
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6IlJTQSIsIm4i
OiIxN2o1OUVTUjd1ak03WVR4aFlXM0JlZ0xaWFAtWTBDZmhpVHQzS2NMZVE0aHBOWUlMRzZFejc1NWlt
QW1sbU1ocmFFODJWYUNVNmR1eGVZcHE0alFjZkdRdGlDQjFjOUp5M243R1JQZmVTNzZGanM0R2JUVnB1
YTZxMW5IdWRTeGh0bDdDeW9JMWRyZmZrSnpMTEFwQ0VwajFlUlI4YmJMblRrS3E1dU9RM0xWQXl1TDFS
Qkp4UXBfblZ3VGpWa2l2Ul9hYU1OaHdicmRKa3hoRG9kZnNndUVpMzZ3S2FUeVhkeGljU211blZqWmxV
SlNEYjFVUktQRVowWGo2QXpHcnFZbmw2WXd5UW9zenhkUF92ekE1LXJWdEVzSjlyYXJNX3J2MFZwTkZE
SzNNTWNuc2VzT19DSllJTWIxcVR5Wk44NTZvQ3ZVbUs3YVVWamR6eHRVcHcifX0.eyJAY29udGV4dCI6
WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwuaW1zZ2xv
YmFsLm9yZy9zcGVjL2Nsci92MnAwL2NvbnRleHQtMi4wLjEuanNvbiIsImh0dHBzOi8vcHVybC5pbXNn
bG9iYWwub3JnL3NwZWMvb2IvdjNwMC9jb250ZXh0LTMuMC4zLmpzb24iLCJodHRwczovL3B1cmwuaW1z
Z2xvYmFsLm9yZy9zcGVjL29iL3YzcDAvZXh0ZW5zaW9ucy5qc29uIl0sImlkIjoiaHR0cDovL2V4YW1w
bGUuZWR1L2NyZWRlbnRpYWxzLzM3MzIiLCJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiQ2xy
Q3JlZGVudGlhbCJdLCJpc3N1ZXIiOnsiaWQiOiJodHRwczovL2V4YW1wbGUuZWR1L2lzc3VlcnMvNTY1
MDQ5IiwidHlwZSI6WyJQcm9maWxlIl0sIm5hbWUiOiJFeGFtcGxlIFVuaXZlcnNpdHkifSwidmFsaWRG
cm9tIjoiMjAxMC0wMS0wMVQwMDowMDowMFoiLCJuYW1lIjoiU2FtcGxlIFRyYW5zY3JpcHQiLCJjcmVk
ZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMy
MSIsInR5cGUiOlsiQ2xyU3ViamVjdCJdLCJ2ZXJpZmlhYmxlQ3JlZGVudGlhbCI6WyJleUpoYkdjaU9p
SlNVekkxTmlJc0luUjVjQ0k2SWtwWFZDSXNJbXAzYXlJNmV5SmxJam9pUVZGQlFpSXNJbXQwZVNJNkls
SlRRU0lzSW00aU9pSXhOMm8xT1VWVFVqZDFhazAzV1ZSNGFGbFhNMEpsWjB4YVdGQXRXVEJEWm1ocFZI
UXpTMk5NWlZFMGFIQk9XVWxNUnpaRmVqYzFOV2x0UVcxc2JVMW9jbUZGT0RKV1lVTlZObVIxZUdWWmNI
RTBhbEZqWmtkUmRHbERRakZqT1VwNU0yNDNSMUpRWm1WVE56Wkdhbk0wUjJKVVZuQjFZVFp4TVc1SWRX
UlRlR2gwYkRkRGVXOUpNV1J5Wm1aclNucE1URUZ3UTBWd2FqRmxVbEk0WW1KTWJsUnJTM0UxZFU5Uk0w
eFdRWGwxVERGU1FrcDRVWEJmYmxaM1ZHcFdhMmwyVWw5aFlVMU9hSGRpY21SS2EzaG9SRzlrWm5ObmRV
VnBNelozUzJGVWVWaGtlR2xqVTIxMWJsWnFXbXhWU2xORVlqRlZVa3RRUlZvd1dHbzJRWHBIY25GWmJt
dzJXWGQ1VVc5emVuaGtVRjkyZWtFMUxYSldkRVZ6U2pseVlYSk5YM0oyTUZad1RrWkVTek5OVFdOdWMy
VnpUMTlEU2xsSlRXSXhjVlI1V2s0NE5UWnZRM1pWYlVzM1lWVldhbVI2ZUhSVmNIY2lmWDAuZXlKQVky
OXVkR1Y0ZENJNld5Sm9kSFJ3Y3pvdkwzZDNkeTUzTXk1dmNtY3Zibk12WTNKbFpHVnVkR2xoYkhNdmRq
SWlMQ0pvZEhSd2N6b3ZMM0IxY213dWFXMXpaMnh2WW1Gc0xtOXlaeTl6Y0dWakwyOWlMM1l6Y0RBdlky
OXVkR1Y0ZEMwekxqQXVNeTVxYzI5dUlpd2lhSFIwY0hNNkx5OXdkWEpzTG1sdGMyZHNiMkpoYkM1dmNt
Y3ZjM0JsWXk5dllpOTJNM0F3TDJWNGRHVnVjMmx2Ym5NdWFuTnZiaUpkTENKcFpDSTZJblZ5YmpwMWRX
bGtPamt4TlRNM1pHSmhMVFUyWTJJdE1URmxZeTFpWmpZekxUQXlOREpoWXpFek1EQXdNaUlzSW5SNWNH
VWlPbHNpVm1WeWFXWnBZV0pzWlVOeVpXUmxiblJwWVd3aUxDSkJZMmhwWlhabGJXVnVkRU55WldSbGJu
UnBZV3dpWFN3aWFYTnpkV1Z5SWpwN0ltbGtJam9pYUhSMGNITTZMeTlsZUdGdGNHeGxMbVZrZFM5cGMz
TjFaWEp6THpVMk5UQTBPU0lzSW5SNWNHVWlPbHNpVUhKdlptbHNaU0pkTENKdVlXMWxJam9pUlhoaGJY
QnNaU0JWYm1sMlpYSnphWFI1SW4wc0luWmhiR2xrUm5KdmJTSTZJakl3TVRBdE1ERXRNREZVTURBNk1E
QTZNREJhSWl3aWJtRnRaU0k2SWtWNFlXMXdiR1VnVlc1cGRtVnljMmwwZVNCRVpXZHlaV1VpTENKamNt
VmtaVzUwYVdGc1UzVmlhbVZqZENJNmV5SnBaQ0k2SW1ScFpEcGxlR0Z0Y0d4bE9tVmlabVZpTVdZM01U
SmxZbU0yWmpGak1qYzJaVEV5WldNeU1TSXNJblI1Y0dVaU9sc2lRV05vYVdWMlpXMWxiblJUZFdKcVpX
TjBJbDBzSW1GamFHbGxkbVZ0Wlc1MElqcDdJbWxrSWpvaWRYSnVPblYxYVdRNllUYzBOamRsWmpZdE5U
WmpZaTB4TVdWakxXSm1Oak10TURJME1tRmpNVE13TURBeUlpd2lkSGx3WlNJNld5SkJZMmhwWlhabGJX
VnVkQ0pkTENKamNtVmhkRzl5SWpwN0ltbGtJam9pYUhSMGNITTZMeTlsZUdGdGNHeGxMbVZrZFM5cGMz
TjFaWEp6THpVMk5UQTBPU0lzSW5SNWNHVWlPbHNpVUhKdlptbHNaU0pkZlN3aWJtRnRaU0k2SWtGamFH
bGxkbVZ0Wlc1MElERWlMQ0pqY21sMFpYSnBZU0k2ZXlKcFpDSTZJbWgwZEhCek9pOHZaWGhoYlhCc1pT
NWxaSFV2WVdOb2FXVjJaVzFsYm5SekwyRTNORFkzWldZMkxUVTJZMkl0TVRGbFl5MWlaall6TFRBeU5E
SmhZekV6TURBd01pOWpjbWwwWlhKcFlTSjlMQ0prWlhOamNtbHdkR2x2YmlJNklrRmphR2xsZG1WdFpX
NTBJREVpTENKcGJXRm5aU0k2ZXlKcFpDSTZJbWgwZEhCek9pOHZaWGhoYlhCc1pTNWxaSFV2WVdOb2FX
VjJaVzFsYm5SekwzTmhiWEJzWlM1d2JtY2lMQ0owZVhCbElqb2lTVzFoWjJVaWZYMTlMQ0pqY21Wa1pX
NTBhV0ZzVTJOb1pXMWhJanBiZXlKcFpDSTZJbWgwZEhCek9pOHZjSFZ5YkM1cGJYTm5iRzlpWVd3dWIz
Sm5MM053WldNdlkyeHlMM1l5Y0RBdmMyTm9aVzFoTDJwemIyNHZZMnh5WDNZeWNEQmZZMnh5WTNKbFpH
VnVkR2xoYkY5elkyaGxiV0V1YW5OdmJpSXNJblI1Y0dVaU9pSXhSV1JVWldOb1NuTnZibE5qYUdWdFlW
WmhiR2xrWVhSdmNqSXdNVGtpZlYwc0ltbHpjeUk2SW1oMGRIQnpPaTh2WlhoaGJYQnNaUzVsWkhVdmFY
TnpkV1Z5Y3k4MU5qVXdORGtpTENKcWRHa2lPaUoxY200NmRYVnBaRG81TVRVek4yUmlZUzAxTm1OaUxU
RXhaV010WW1ZMk15MHdNalF5WVdNeE16QXdNRElpTENKemRXSWlPaUprYVdRNlpYaGhiWEJzWlRwbFlt
WmxZakZtTnpFeVpXSmpObVl4WXpJM05tVXhNbVZqTWpFaWZRLk1Ba0dERmg0Y0huZFRhWXZWdkd1Mm9q
azNJcnNxU082Tmp2S3hYelAyZFJmZ05TN2ZuRm1IUmlxb1dOb00zUkt0cHJjLUc2X1JyckxqbFhxWWI4
dkF0ajhLQzNTZzhadVlpeUptbjYzeS1QMDJubjUtdTlfc0dpTTJ0UDlFa1FhemQxR2pCcWpnaW9XMDhJ
Rkt6VDlQeFZPdlVBY2FKWnI2SGoxSkc0bWIyMEJycGo1eWxzYTlYQURfaXJUZXNhLVJlUjQ5ZDhiTXNU
N0oybjFyRzE1ckxKdHV3d0FUMWxmd3J2T2RvUkdBd3NxaDRMNWt4NE1Vb2Zfbi01MEhYTFFCdTA3cXVX
QVp0aXozaXN5b2VtdFdQY3VUSFY1WTdzbWN2MDF1bERSeXVEc25jUUo3LVJhMWx0TXBlemJncG9NRlFi
S0dlWGZEMGVxOUJqWjRkTlZ1ZyJdLCJhY2hpZXZlbWVudCI6W3siaWQiOiJ1cm46dXVpZDphNzQ2N2Vm
Ni01NmNiLTExZWMtYmY2My0wMjQyYWMxMzAwMDIiLCJ0eXBlIjpbIkFjaGlldmVtZW50Il0sImNyZWF0
b3IiOnsiaWQiOiJodHRwczovL2V4YW1wbGUuZWR1L2lzc3VlcnMvNTY1MDQ5IiwidHlwZSI6WyJQcm9m
aWxlIl19LCJuYW1lIjoiQWNoaWV2ZW1lbnQgMSIsImNyaXRlcmlhIjp7ImlkIjoiaHR0cHM6Ly9leGFt
cGxlLmVkdS9hY2hpZXZlbWVudHMvYTc0NjdlZjYtNTZjYi0xMWVjLWJmNjMtMDI0MmFjMTMwMDAyL2Ny
aXRlcmlhIn0sImRlc2NyaXB0aW9uIjoiQWNoaWV2ZW1lbnQgMSIsImltYWdlIjp7ImlkIjoiaHR0cHM6
Ly9leGFtcGxlLmVkdS9hY2hpZXZlbWVudHMvc2FtcGxlLnBuZyIsInR5cGUiOiJJbWFnZSJ9fSx7Imlk
IjoidXJuOnV1aWQ6ZGQ4ODdmMGEtNTZjYi0xMWVjLWJmNjMtMDI0MmFjMTMwMDAyIiwidHlwZSI6WyJB
Y2hpZXZlbWVudCJdLCJjcmVhdG9yIjp7ImlkIjoiaHR0cHM6Ly9leGFtcGxlLmVkdS9pc3N1ZXJzLzU2
NTA0OSIsInR5cGUiOlsiUHJvZmlsZSJdfSwibmFtZSI6IkFjaGlldmVtZW50IDIiLCJjcml0ZXJpYSI6
eyJpZCI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvYWNoaWV2ZW1lbnRzL2RkODg3ZjBhLTU2Y2ItMTFlYy1i
ZjYzLTAyNDJhYzEzMDAwMi9jcml0ZXJpYSJ9LCJkZXNjcmlwdGlvbiI6IkFjaGlldmVtZW50IDIiLCJp
bWFnZSI6eyJpZCI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvYWNoaWV2ZW1lbnRzL3NhbXBsZS5wbmciLCJ0
eXBlIjoiSW1hZ2UifX1dLCJhc3NvY2lhdGlvbiI6W3sidHlwZSI6IkFzc29jaWF0aW9uIiwiYXNzb2Np
YXRpb25UeXBlIjoiaXNQYXJlbnRPZiIsInNvdXJjZUlkIjoidXJuOnV1aWQ6YTc0NjdlZjYtNTZjYi0x
MWVjLWJmNjMtMDI0MmFjMTMwMDAyIiwidGFyZ2V0SWQiOiJ1cm46dXVpZDpkZDg4N2YwYS01NmNiLTEx
ZWMtYmY2My0wMjQyYWMxMzAwMDIifV19LCJjcmVkZW50aWFsU2NoZW1hIjpbeyJpZCI6Imh0dHBzOi8v
cHVybC5pbXNnbG9iYWwub3JnL3NwZWMvY2xyL3YycDAvc2NoZW1hL2pzb24vY2xyX3YycDBfYWNoaWV2
ZW1lbnRjcmVkZW50aWFsX3NjaGVtYS5qc29uIiwidHlwZSI6IjFFZFRlY2hKc29uU2NoZW1hVmFsaWRh
dG9yMjAxOSJ9XSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmVkdS9pc3N1ZXJzLzU2NTA0OSIsImp0aSI6
Imh0dHA6Ly9leGFtcGxlLmVkdS9jcmVkZW50aWFscy8zNzMyIiwic3ViIjoiZGlkOmV4YW1wbGU6ZWJm
ZWIxZjcxMmViYzZmMWMyNzZlMTJlYzIxIn0.EW9bAM3vb6sP3i4H-VoQS2VquIN_KTm0azveP_HBConG
BZQ94CGo0njRi1dZy_yrMMnKH6FYbaQgO4WfD4Njj2DK2g6jgD6AvTKunVlLM7WjqbD2YIFjOArpdncq
W3-LnWAKBOmvUe3obbiYCE2-HNJ6SphPILvgmJUTxCXwsf4TV2ANk3LHRj5mFGSTQywg_Er2fx_UJiAL
jrRUHFwDf8iOFapfEJ4VFyV-bLbABZhmGl6aZ1hU4iNPl76_0euRrw9snNrKFS-Ze-ehAzMw7kukofyn
gtLTzXB02ixyxurJ-d6G-0Y9CjvgqpT7ibZjh7cIvQCDyPC2WF_bNDytHw
Since they also have the same
validFrom
both are up-to-date.
9.1.2
Comparison
Credentials
and
are equal since they have the same
id
and the same
issuer.id
Example
31
: Sample Credential C
Credential
Verifiable Credential (with proof)
Verifiable Credential (as JWT)
"@context"
"https://www.w3.org/ns/credentials/v2"
"https://purl.imsglobal.org/spec/clr/v2p0/context-2.0.1.json"
"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"
"ClrCredential"
"issuer"
"id"
"https://example.edu/issuers/565049"
"type"
"Profile"
"name"
"Example University"
"validFrom"
"2010-03-01T00:00:00Z"
"name"
"Sample Transcript"
"credentialSubject"
"id"
"did:example:ebfeb1f712ebc6f1c276e12ec21"
"type"
"ClrSubject"
"verifiableCredential"
"@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"
"urn:uuid:91537dba-56cb-11ec-bf63-0242ac130002"
"type"
"VerifiableCredential"
"AchievementCredential"
"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"
"urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002"
"type"
"Achievement"
"creator"
"id"
"https://example.edu/issuers/565049"
"type"
"Profile"
"name"
"Achievement 1"
"criteria"
"id"
"https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac130002/criteria"
"description"
"Achievement 1"
"image"
"id"
"https://example.edu/achievements/sample.png"
"type"
"Image"
"credentialSchema"
"id"
"https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_clrcredential_schema.json"
"type"
"1EdTechJsonSchemaValidator2019"
"achievement"
"id"
"urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002"
"type"
"Achievement"
"creator"
"id"
"https://example.edu/issuers/565049"
"type"
"Profile"
"name"
"Achievement 1"
"criteria"
"id"
"https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac130002/criteria"
"description"
"Achievement 1"
"image"
"id"
"https://example.edu/achievements/sample.png"
"type"
"Image"
"id"
"urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
"type"
"Achievement"
"creator"
"id"
"https://example.edu/issuers/565049"
"type"
"Profile"
"name"
"Achievement 2"
"criteria"
"id"
"https://example.edu/achievements/dd887f0a-56cb-11ec-bf63-0242ac130002/criteria"
"description"
"Achievement 2"
"image"
"id"
"https://example.edu/achievements/sample.png"
"type"
"Image"
"association"
"type"
"Association"
"associationType"
"isParentOf"
"sourceId"
"urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002"
"targetId"
"urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
"credentialSchema"
"id"
"https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_achievementcredential_schema.json"
"type"
"1EdTechJsonSchemaValidator2019"
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/clr/v2p0/context-2.0.1.json",
"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",
"ClrCredential"
],
"issuer": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
],
"name": "Example University"
},
"validFrom": "2010-03-01T00:00:00Z",
"name": "Sample Transcript",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"type": [
"ClrSubject"
],
"verifiableCredential": [
"@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": "urn:uuid:91537dba-56cb-11ec-bf63-0242ac130002",
"type": [
"VerifiableCredential",
"AchievementCredential"
],
"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": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 1",
"criteria": {
"id": "https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac130002/criteria"
},
"description": "Achievement 1",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
},
"credentialSchema": [
"id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_clrcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
],
"proof": [
"type": "DataIntegrityProof",
"created": "2025-12-19T08:28:50Z",
"verificationMethod": "https://example.edu/issuers/565049#z6Mkjiro8LyB8SzRerGZiFjW1xRmMrPmrBVa7RNbsU8ui1Xi",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z5gk5shGEFNhFeVtW6SNF4uAQWsBgAgye3JT2gVWE7dvdTdujX4LPQpyJZYKaXeJAB8xVBj1vYmV31Va1bowxXZYf"
],
"achievement": [
"id": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 1",
"criteria": {
"id": "https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac130002/criteria"
},
"description": "Achievement 1",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
},
"id": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 2",
"criteria": {
"id": "https://example.edu/achievements/dd887f0a-56cb-11ec-bf63-0242ac130002/criteria"
},
"description": "Achievement 2",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
],
"association": [
"type": "Association",
"associationType": "isParentOf",
"sourceId": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"targetId": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
},
"credentialSchema": [
"id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_achievementcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
],
"proof": [
"type": "DataIntegrityProof",
"created": "2025-12-19T08:28:50Z",
"verificationMethod": "https://example.edu/issuers/565049#z6Mkjiro8LyB8SzRerGZiFjW1xRmMrPmrBVa7RNbsU8ui1Xi",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z5pjYgs4bdWvP6hjgfZ5RuPv7ZkdtA4EFDQmkoK1HWLxSn5yBXqDbSyaKbLtymn6udNP5hpsftSc7BDVQQCuMmtuo"
---------------- JWT header ---------------
"alg": "RS256",
"typ": "JWT",
"jwk": {
"e": "AQAB",
"kty": "RSA",
"n": "17j59ESR7ujM7YTxhYW3BegLZXP-Y0CfhiTt3KcLeQ4hpNYILG6Ez755imAmlmMhraE82V
aCU6duxeYpq4jQcfGQtiCB1c9Jy3n7GRPfeS76Fjs4GbTVpua6q1nHudSxhtl7CyoI1drffkJzLLApCE
pj1eRR8bbLnTkKq5uOQ3LVAyuL1RBJxQp_nVwTjVkivR_aaMNhwbrdJkxhDodfsguEi36wKaTyXdxicS
munVjZlUJSDb1URKPEZ0Xj6AzGrqYnl6YwyQoszxdP_vzA5-rVtEsJ9rarM_rv0VpNFDK3MMcnsesO_C
JYIMb1qTyZN856oCvUmK7aUVjdzxtUpw"
--------------- 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/clr/v2p0/context-2.0.1.json",
"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",
"ClrCredential"
],
"issuer": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
],
"name": "Example University"
},
"validFrom": "2010-03-01T00:00:00Z",
"name": "Sample Transcript",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"type": [
"ClrSubject"
],
"verifiableCredential": [
"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6IlJTQ
SIsIm4iOiIxN2o1OUVTUjd1ak03WVR4aFlXM0JlZ0xaWFAtWTBDZmhpVHQzS2NMZVE0aHBOWUlMRzZFe
jc1NWltQW1sbU1ocmFFODJWYUNVNmR1eGVZcHE0alFjZkdRdGlDQjFjOUp5M243R1JQZmVTNzZGanM0R
2JUVnB1YTZxMW5IdWRTeGh0bDdDeW9JMWRyZmZrSnpMTEFwQ0VwajFlUlI4YmJMblRrS3E1dU9RM0xWQ
Xl1TDFSQkp4UXBfblZ3VGpWa2l2Ul9hYU1OaHdicmRKa3hoRG9kZnNndUVpMzZ3S2FUeVhkeGljU211b
lZqWmxVSlNEYjFVUktQRVowWGo2QXpHcnFZbmw2WXd5UW9zenhkUF92ekE1LXJWdEVzSjlyYXJNX3J2M
FZwTkZESzNNTWNuc2VzT19DSllJTWIxcVR5Wk44NTZvQ3ZVbUs3YVVWamR6eHRVcHcifX0.eyJAY29ud
GV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwua
W1zZ2xvYmFsLm9yZy9zcGVjL29iL3YzcDAvY29udGV4dC0zLjAuMy5qc29uIiwiaHR0cHM6Ly9wdXJsL
mltc2dsb2JhbC5vcmcvc3BlYy9vYi92M3AwL2V4dGVuc2lvbnMuanNvbiJdLCJpZCI6InVybjp1dWlkO
jkxNTM3ZGJhLTU2Y2ItMTFlYy1iZjYzLTAyNDJhYzEzMDAwMiIsInR5cGUiOlsiVmVyaWZpYWJsZUNyZ
WRlbnRpYWwiLCJBY2hpZXZlbWVudENyZWRlbnRpYWwiXSwiaXNzdWVyIjp7ImlkIjoiaHR0cHM6Ly9le
GFtcGxlLmVkdS9pc3N1ZXJzLzU2NTA0OSIsInR5cGUiOlsiUHJvZmlsZSJdLCJuYW1lIjoiRXhhbXBsZ
SBVbml2ZXJzaXR5In0sInZhbGlkRnJvbSI6IjIwMTAtMDEtMDFUMDA6MDA6MDBaIiwibmFtZSI6IkV4Y
W1wbGUgVW5pdmVyc2l0eSBEZWdyZWUiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDpleGFtc
GxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMyMSIsInR5cGUiOlsiQWNoaWV2ZW1lbnRTdWJqZWN0I
l0sImFjaGlldmVtZW50Ijp7ImlkIjoidXJuOnV1aWQ6YTc0NjdlZjYtNTZjYi0xMWVjLWJmNjMtMDI0M
mFjMTMwMDAyIiwidHlwZSI6WyJBY2hpZXZlbWVudCJdLCJjcmVhdG9yIjp7ImlkIjoiaHR0cHM6Ly9le
GFtcGxlLmVkdS9pc3N1ZXJzLzU2NTA0OSIsInR5cGUiOlsiUHJvZmlsZSJdfSwibmFtZSI6IkFjaGlld
mVtZW50IDEiLCJjcml0ZXJpYSI6eyJpZCI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvYWNoaWV2ZW1lbnRzL
2E3NDY3ZWY2LTU2Y2ItMTFlYy1iZjYzLTAyNDJhYzEzMDAwMi9jcml0ZXJpYSJ9LCJkZXNjcmlwdGlvb
iI6IkFjaGlldmVtZW50IDEiLCJpbWFnZSI6eyJpZCI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvYWNoaWV2Z
W1lbnRzL3NhbXBsZS5wbmciLCJ0eXBlIjoiSW1hZ2UifX19LCJjcmVkZW50aWFsU2NoZW1hIjpbeyJpZ
CI6Imh0dHBzOi8vcHVybC5pbXNnbG9iYWwub3JnL3NwZWMvY2xyL3YycDAvc2NoZW1hL2pzb24vY2xyX
3YycDBfY2xyY3JlZGVudGlhbF9zY2hlbWEuanNvbiIsInR5cGUiOiIxRWRUZWNoSnNvblNjaGVtYVZhb
GlkYXRvcjIwMTkifV0sImlzcyI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvaXNzdWVycy81NjUwNDkiLCJqd
GkiOiJ1cm46dXVpZDo5MTUzN2RiYS01NmNiLTExZWMtYmY2My0wMjQyYWMxMzAwMDIiLCJzdWIiOiJka
WQ6ZXhhbXBsZTplYmZlYjFmNzEyZWJjNmYxYzI3NmUxMmVjMjEifQ.MAkGDFh4cHndTaYvVvGu2ojk3I
rsqSO6NjvKxXzP2dRfgNS7fnFmHRiqoWNoM3RKtprc-G6_RrrLjlXqYb8vAtj8KC3Sg8ZuYiyJmn63y-
P02nn5-u9_sGiM2tP9EkQazd1GjBqjgioW08IFKzT9PxVOvUAcaJZr6Hj1JG4mb20Brpj5ylsa9XAD_i
rTesa-ReR49d8bMsT7J2n1rG15rLJtuwwAT1lfwrvOdoRGAwsqh4L5kx4MUof_n-50HXLQBu07quWAZt
iz3isyoemtWPcuTHV5Y7smcv01ulDRyuDsncQJ7-Ra1ltMpezbgpoMFQbKGeXfD0eq9BjZ4dNVug"
],
"achievement": [
"id": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 1",
"criteria": {
"id": "https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac
130002/criteria"
},
"description": "Achievement 1",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
},
"id": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 2",
"criteria": {
"id": "https://example.edu/achievements/dd887f0a-56cb-11ec-bf63-0242ac
130002/criteria"
},
"description": "Achievement 2",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
],
"association": [
"type": "Association",
"associationType": "isParentOf",
"sourceId": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"targetId": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
},
"credentialSchema": [
"id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_achie
vementcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
],
"iss": "https://example.edu/issuers/565049",
"jti": "http://example.edu/credentials/3732",
"sub": "did:example:ebfeb1f712ebc6f1c276e12ec21"
--------------- JWT ---------------
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6IlJTQSIsIm4i
OiIxN2o1OUVTUjd1ak03WVR4aFlXM0JlZ0xaWFAtWTBDZmhpVHQzS2NMZVE0aHBOWUlMRzZFejc1NWlt
QW1sbU1ocmFFODJWYUNVNmR1eGVZcHE0alFjZkdRdGlDQjFjOUp5M243R1JQZmVTNzZGanM0R2JUVnB1
YTZxMW5IdWRTeGh0bDdDeW9JMWRyZmZrSnpMTEFwQ0VwajFlUlI4YmJMblRrS3E1dU9RM0xWQXl1TDFS
Qkp4UXBfblZ3VGpWa2l2Ul9hYU1OaHdicmRKa3hoRG9kZnNndUVpMzZ3S2FUeVhkeGljU211blZqWmxV
SlNEYjFVUktQRVowWGo2QXpHcnFZbmw2WXd5UW9zenhkUF92ekE1LXJWdEVzSjlyYXJNX3J2MFZwTkZE
SzNNTWNuc2VzT19DSllJTWIxcVR5Wk44NTZvQ3ZVbUs3YVVWamR6eHRVcHcifX0.eyJAY29udGV4dCI6
WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwuaW1zZ2xv
YmFsLm9yZy9zcGVjL2Nsci92MnAwL2NvbnRleHQtMi4wLjEuanNvbiIsImh0dHBzOi8vcHVybC5pbXNn
bG9iYWwub3JnL3NwZWMvb2IvdjNwMC9jb250ZXh0LTMuMC4zLmpzb24iLCJodHRwczovL3B1cmwuaW1z
Z2xvYmFsLm9yZy9zcGVjL29iL3YzcDAvZXh0ZW5zaW9ucy5qc29uIl0sImlkIjoiaHR0cDovL2V4YW1w
bGUuZWR1L2NyZWRlbnRpYWxzLzM3MzIiLCJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiQ2xy
Q3JlZGVudGlhbCJdLCJpc3N1ZXIiOnsiaWQiOiJodHRwczovL2V4YW1wbGUuZWR1L2lzc3VlcnMvNTY1
MDQ5IiwidHlwZSI6WyJQcm9maWxlIl0sIm5hbWUiOiJFeGFtcGxlIFVuaXZlcnNpdHkifSwidmFsaWRG
cm9tIjoiMjAxMC0wMy0wMVQwMDowMDowMFoiLCJuYW1lIjoiU2FtcGxlIFRyYW5zY3JpcHQiLCJjcmVk
ZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMy
MSIsInR5cGUiOlsiQ2xyU3ViamVjdCJdLCJ2ZXJpZmlhYmxlQ3JlZGVudGlhbCI6WyJleUpoYkdjaU9p
SlNVekkxTmlJc0luUjVjQ0k2SWtwWFZDSXNJbXAzYXlJNmV5SmxJam9pUVZGQlFpSXNJbXQwZVNJNkls
SlRRU0lzSW00aU9pSXhOMm8xT1VWVFVqZDFhazAzV1ZSNGFGbFhNMEpsWjB4YVdGQXRXVEJEWm1ocFZI
UXpTMk5NWlZFMGFIQk9XVWxNUnpaRmVqYzFOV2x0UVcxc2JVMW9jbUZGT0RKV1lVTlZObVIxZUdWWmNI
RTBhbEZqWmtkUmRHbERRakZqT1VwNU0yNDNSMUpRWm1WVE56Wkdhbk0wUjJKVVZuQjFZVFp4TVc1SWRX
UlRlR2gwYkRkRGVXOUpNV1J5Wm1aclNucE1URUZ3UTBWd2FqRmxVbEk0WW1KTWJsUnJTM0UxZFU5Uk0w
eFdRWGwxVERGU1FrcDRVWEJmYmxaM1ZHcFdhMmwyVWw5aFlVMU9hSGRpY21SS2EzaG9SRzlrWm5ObmRV
VnBNelozUzJGVWVWaGtlR2xqVTIxMWJsWnFXbXhWU2xORVlqRlZVa3RRUlZvd1dHbzJRWHBIY25GWmJt
dzJXWGQ1VVc5emVuaGtVRjkyZWtFMUxYSldkRVZ6U2pseVlYSk5YM0oyTUZad1RrWkVTek5OVFdOdWMy
VnpUMTlEU2xsSlRXSXhjVlI1V2s0NE5UWnZRM1pWYlVzM1lWVldhbVI2ZUhSVmNIY2lmWDAuZXlKQVky
OXVkR1Y0ZENJNld5Sm9kSFJ3Y3pvdkwzZDNkeTUzTXk1dmNtY3Zibk12WTNKbFpHVnVkR2xoYkhNdmRq
SWlMQ0pvZEhSd2N6b3ZMM0IxY213dWFXMXpaMnh2WW1Gc0xtOXlaeTl6Y0dWakwyOWlMM1l6Y0RBdlky
OXVkR1Y0ZEMwekxqQXVNeTVxYzI5dUlpd2lhSFIwY0hNNkx5OXdkWEpzTG1sdGMyZHNiMkpoYkM1dmNt
Y3ZjM0JsWXk5dllpOTJNM0F3TDJWNGRHVnVjMmx2Ym5NdWFuTnZiaUpkTENKcFpDSTZJblZ5YmpwMWRX
bGtPamt4TlRNM1pHSmhMVFUyWTJJdE1URmxZeTFpWmpZekxUQXlOREpoWXpFek1EQXdNaUlzSW5SNWNH
VWlPbHNpVm1WeWFXWnBZV0pzWlVOeVpXUmxiblJwWVd3aUxDSkJZMmhwWlhabGJXVnVkRU55WldSbGJu
UnBZV3dpWFN3aWFYTnpkV1Z5SWpwN0ltbGtJam9pYUhSMGNITTZMeTlsZUdGdGNHeGxMbVZrZFM5cGMz
TjFaWEp6THpVMk5UQTBPU0lzSW5SNWNHVWlPbHNpVUhKdlptbHNaU0pkTENKdVlXMWxJam9pUlhoaGJY
QnNaU0JWYm1sMlpYSnphWFI1SW4wc0luWmhiR2xrUm5KdmJTSTZJakl3TVRBdE1ERXRNREZVTURBNk1E
QTZNREJhSWl3aWJtRnRaU0k2SWtWNFlXMXdiR1VnVlc1cGRtVnljMmwwZVNCRVpXZHlaV1VpTENKamNt
VmtaVzUwYVdGc1UzVmlhbVZqZENJNmV5SnBaQ0k2SW1ScFpEcGxlR0Z0Y0d4bE9tVmlabVZpTVdZM01U
SmxZbU0yWmpGak1qYzJaVEV5WldNeU1TSXNJblI1Y0dVaU9sc2lRV05vYVdWMlpXMWxiblJUZFdKcVpX
TjBJbDBzSW1GamFHbGxkbVZ0Wlc1MElqcDdJbWxrSWpvaWRYSnVPblYxYVdRNllUYzBOamRsWmpZdE5U
WmpZaTB4TVdWakxXSm1Oak10TURJME1tRmpNVE13TURBeUlpd2lkSGx3WlNJNld5SkJZMmhwWlhabGJX
VnVkQ0pkTENKamNtVmhkRzl5SWpwN0ltbGtJam9pYUhSMGNITTZMeTlsZUdGdGNHeGxMbVZrZFM5cGMz
TjFaWEp6THpVMk5UQTBPU0lzSW5SNWNHVWlPbHNpVUhKdlptbHNaU0pkZlN3aWJtRnRaU0k2SWtGamFH
bGxkbVZ0Wlc1MElERWlMQ0pqY21sMFpYSnBZU0k2ZXlKcFpDSTZJbWgwZEhCek9pOHZaWGhoYlhCc1pT
NWxaSFV2WVdOb2FXVjJaVzFsYm5SekwyRTNORFkzWldZMkxUVTJZMkl0TVRGbFl5MWlaall6TFRBeU5E
SmhZekV6TURBd01pOWpjbWwwWlhKcFlTSjlMQ0prWlhOamNtbHdkR2x2YmlJNklrRmphR2xsZG1WdFpX
NTBJREVpTENKcGJXRm5aU0k2ZXlKcFpDSTZJbWgwZEhCek9pOHZaWGhoYlhCc1pTNWxaSFV2WVdOb2FX
VjJaVzFsYm5SekwzTmhiWEJzWlM1d2JtY2lMQ0owZVhCbElqb2lTVzFoWjJVaWZYMTlMQ0pqY21Wa1pX
NTBhV0ZzVTJOb1pXMWhJanBiZXlKcFpDSTZJbWgwZEhCek9pOHZjSFZ5YkM1cGJYTm5iRzlpWVd3dWIz
Sm5MM053WldNdlkyeHlMM1l5Y0RBdmMyTm9aVzFoTDJwemIyNHZZMnh5WDNZeWNEQmZZMnh5WTNKbFpH
VnVkR2xoYkY5elkyaGxiV0V1YW5OdmJpSXNJblI1Y0dVaU9pSXhSV1JVWldOb1NuTnZibE5qYUdWdFlW
WmhiR2xrWVhSdmNqSXdNVGtpZlYwc0ltbHpjeUk2SW1oMGRIQnpPaTh2WlhoaGJYQnNaUzVsWkhVdmFY
TnpkV1Z5Y3k4MU5qVXdORGtpTENKcWRHa2lPaUoxY200NmRYVnBaRG81TVRVek4yUmlZUzAxTm1OaUxU
RXhaV010WW1ZMk15MHdNalF5WVdNeE16QXdNRElpTENKemRXSWlPaUprYVdRNlpYaGhiWEJzWlRwbFlt
WmxZakZtTnpFeVpXSmpObVl4WXpJM05tVXhNbVZqTWpFaWZRLk1Ba0dERmg0Y0huZFRhWXZWdkd1Mm9q
azNJcnNxU082Tmp2S3hYelAyZFJmZ05TN2ZuRm1IUmlxb1dOb00zUkt0cHJjLUc2X1JyckxqbFhxWWI4
dkF0ajhLQzNTZzhadVlpeUptbjYzeS1QMDJubjUtdTlfc0dpTTJ0UDlFa1FhemQxR2pCcWpnaW9XMDhJ
Rkt6VDlQeFZPdlVBY2FKWnI2SGoxSkc0bWIyMEJycGo1eWxzYTlYQURfaXJUZXNhLVJlUjQ5ZDhiTXNU
N0oybjFyRzE1ckxKdHV3d0FUMWxmd3J2T2RvUkdBd3NxaDRMNWt4NE1Vb2Zfbi01MEhYTFFCdTA3cXVX
QVp0aXozaXN5b2VtdFdQY3VUSFY1WTdzbWN2MDF1bERSeXVEc25jUUo3LVJhMWx0TXBlemJncG9NRlFi
S0dlWGZEMGVxOUJqWjRkTlZ1ZyJdLCJhY2hpZXZlbWVudCI6W3siaWQiOiJ1cm46dXVpZDphNzQ2N2Vm
Ni01NmNiLTExZWMtYmY2My0wMjQyYWMxMzAwMDIiLCJ0eXBlIjpbIkFjaGlldmVtZW50Il0sImNyZWF0
b3IiOnsiaWQiOiJodHRwczovL2V4YW1wbGUuZWR1L2lzc3VlcnMvNTY1MDQ5IiwidHlwZSI6WyJQcm9m
aWxlIl19LCJuYW1lIjoiQWNoaWV2ZW1lbnQgMSIsImNyaXRlcmlhIjp7ImlkIjoiaHR0cHM6Ly9leGFt
cGxlLmVkdS9hY2hpZXZlbWVudHMvYTc0NjdlZjYtNTZjYi0xMWVjLWJmNjMtMDI0MmFjMTMwMDAyL2Ny
aXRlcmlhIn0sImRlc2NyaXB0aW9uIjoiQWNoaWV2ZW1lbnQgMSIsImltYWdlIjp7ImlkIjoiaHR0cHM6
Ly9leGFtcGxlLmVkdS9hY2hpZXZlbWVudHMvc2FtcGxlLnBuZyIsInR5cGUiOiJJbWFnZSJ9fSx7Imlk
IjoidXJuOnV1aWQ6ZGQ4ODdmMGEtNTZjYi0xMWVjLWJmNjMtMDI0MmFjMTMwMDAyIiwidHlwZSI6WyJB
Y2hpZXZlbWVudCJdLCJjcmVhdG9yIjp7ImlkIjoiaHR0cHM6Ly9leGFtcGxlLmVkdS9pc3N1ZXJzLzU2
NTA0OSIsInR5cGUiOlsiUHJvZmlsZSJdfSwibmFtZSI6IkFjaGlldmVtZW50IDIiLCJjcml0ZXJpYSI6
eyJpZCI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvYWNoaWV2ZW1lbnRzL2RkODg3ZjBhLTU2Y2ItMTFlYy1i
ZjYzLTAyNDJhYzEzMDAwMi9jcml0ZXJpYSJ9LCJkZXNjcmlwdGlvbiI6IkFjaGlldmVtZW50IDIiLCJp
bWFnZSI6eyJpZCI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvYWNoaWV2ZW1lbnRzL3NhbXBsZS5wbmciLCJ0
eXBlIjoiSW1hZ2UifX1dLCJhc3NvY2lhdGlvbiI6W3sidHlwZSI6IkFzc29jaWF0aW9uIiwiYXNzb2Np
YXRpb25UeXBlIjoiaXNQYXJlbnRPZiIsInNvdXJjZUlkIjoidXJuOnV1aWQ6YTc0NjdlZjYtNTZjYi0x
MWVjLWJmNjMtMDI0MmFjMTMwMDAyIiwidGFyZ2V0SWQiOiJ1cm46dXVpZDpkZDg4N2YwYS01NmNiLTEx
ZWMtYmY2My0wMjQyYWMxMzAwMDIifV19LCJjcmVkZW50aWFsU2NoZW1hIjpbeyJpZCI6Imh0dHBzOi8v
cHVybC5pbXNnbG9iYWwub3JnL3NwZWMvY2xyL3YycDAvc2NoZW1hL2pzb24vY2xyX3YycDBfYWNoaWV2
ZW1lbnRjcmVkZW50aWFsX3NjaGVtYS5qc29uIiwidHlwZSI6IjFFZFRlY2hKc29uU2NoZW1hVmFsaWRh
dG9yMjAxOSJ9XSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmVkdS9pc3N1ZXJzLzU2NTA0OSIsImp0aSI6
Imh0dHA6Ly9leGFtcGxlLmVkdS9jcmVkZW50aWFscy8zNzMyIiwic3ViIjoiZGlkOmV4YW1wbGU6ZWJm
ZWIxZjcxMmViYzZmMWMyNzZlMTJlYzIxIn0.bgrdWDYVUA6c2Dz7JKumfOxy-N0L6OBN9y5QR5pBYQyL
0bRHnt06sq6GYUs6CRusK4aUVXYjW1EIwhSFU3IntEZ7V4kiCIGZHv0kYI6PSDr83NXGy6OvUAvcySvu
OtAo1XxPK6W8qw3UR7zJR9N8Z23SBlq3zGNrCfX6HmdpuDCgw7qFUivIgBvljlb23mHjmiaCDUtNxKRz
pYpSEUpkAFI5R9aRg-DD27VH31Kwho2FRca7fSpu3G6-m-0lj53rMoRAhV1Fuz451YhyRr1VckWs4s8B
RRJbpaaXnKTYPpgoP7Xe4wFEy5YJWsmYVF9G-kK52GM6EtRHRUY13zi4pA
Example
32
: Sample Credential D
Credential
Verifiable Credential (with proof)
Verifiable Credential (as JWT)
"@context"
"https://www.w3.org/ns/credentials/v2"
"https://purl.imsglobal.org/spec/clr/v2p0/context-2.0.1.json"
"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"
"ClrCredential"
"issuer"
"id"
"https://example.edu/issuers/565049"
"type"
"Profile"
"name"
"Example University"
"validFrom"
"2010-01-01T00:00:00Z"
"name"
"Sample Transcript"
"credentialSubject"
"id"
"did:example:ebfeb1f712ebc6f1c276e12ec21"
"type"
"ClrSubject"
"verifiableCredential"
"@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"
"urn:uuid:91537dba-56cb-11ec-bf63-0242ac130002"
"type"
"VerifiableCredential"
"AchievementCredential"
"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"
"urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002"
"type"
"Achievement"
"creator"
"id"
"https://example.edu/issuers/565049"
"type"
"Profile"
"name"
"Achievement 1"
"criteria"
"id"
"https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac130002/criteria"
"description"
"Achievement 1"
"image"
"id"
"https://example.edu/achievements/sample.png"
"type"
"Image"
"credentialSchema"
"id"
"https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_clrcredential_schema.json"
"type"
"1EdTechJsonSchemaValidator2019"
"achievement"
"id"
"urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002"
"type"
"Achievement"
"creator"
"id"
"https://example.edu/issuers/565049"
"type"
"Profile"
"name"
"Achievement 1"
"criteria"
"id"
"https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac130002/criteria"
"description"
"Achievement 1"
"image"
"id"
"https://example.edu/achievements/sample.png"
"type"
"Image"
"id"
"urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
"type"
"Achievement"
"creator"
"id"
"https://example.edu/issuers/565049"
"type"
"Profile"
"name"
"Achievement 2"
"criteria"
"id"
"https://example.edu/achievements/dd887f0a-56cb-11ec-bf63-0242ac130002/criteria"
"description"
"Achievement 2"
"image"
"id"
"https://example.edu/achievements/sample.png"
"type"
"Image"
"association"
"type"
"Association"
"associationType"
"isParentOf"
"sourceId"
"urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002"
"targetId"
"urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
"credentialSchema"
"id"
"https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_achievementcredential_schema.json"
"type"
"1EdTechJsonSchemaValidator2019"
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/clr/v2p0/context-2.0.1.json",
"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",
"ClrCredential"
],
"issuer": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
],
"name": "Example University"
},
"validFrom": "2010-01-01T00:00:00Z",
"name": "Sample Transcript",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"type": [
"ClrSubject"
],
"verifiableCredential": [
"@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": "urn:uuid:91537dba-56cb-11ec-bf63-0242ac130002",
"type": [
"VerifiableCredential",
"AchievementCredential"
],
"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": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 1",
"criteria": {
"id": "https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac130002/criteria"
},
"description": "Achievement 1",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
},
"credentialSchema": [
"id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_clrcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
],
"proof": [
"type": "DataIntegrityProof",
"created": "2025-12-19T08:28:50Z",
"verificationMethod": "https://example.edu/issuers/565049#z6Mkjiro8LyB8SzRerGZiFjW1xRmMrPmrBVa7RNbsU8ui1Xi",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z5gk5shGEFNhFeVtW6SNF4uAQWsBgAgye3JT2gVWE7dvdTdujX4LPQpyJZYKaXeJAB8xVBj1vYmV31Va1bowxXZYf"
],
"achievement": [
"id": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 1",
"criteria": {
"id": "https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac130002/criteria"
},
"description": "Achievement 1",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
},
"id": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 2",
"criteria": {
"id": "https://example.edu/achievements/dd887f0a-56cb-11ec-bf63-0242ac130002/criteria"
},
"description": "Achievement 2",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
],
"association": [
"type": "Association",
"associationType": "isParentOf",
"sourceId": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"targetId": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
},
"credentialSchema": [
"id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_achievementcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
],
"proof": [
"type": "DataIntegrityProof",
"created": "2025-12-19T08:28:50Z",
"verificationMethod": "https://example.edu/issuers/565049#z6Mkjiro8LyB8SzRerGZiFjW1xRmMrPmrBVa7RNbsU8ui1Xi",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z2AMJowdS5Eu8y7X2zEcMG92wakWXzVByjy6qjE8rHEVrHMtYKTAyf23k27uTxRYNZG1MQfYfQvYzfwxc8aRErEm5"
---------------- JWT header ---------------
"alg": "RS256",
"typ": "JWT",
"jwk": {
"e": "AQAB",
"kty": "RSA",
"n": "17j59ESR7ujM7YTxhYW3BegLZXP-Y0CfhiTt3KcLeQ4hpNYILG6Ez755imAmlmMhraE82V
aCU6duxeYpq4jQcfGQtiCB1c9Jy3n7GRPfeS76Fjs4GbTVpua6q1nHudSxhtl7CyoI1drffkJzLLApCE
pj1eRR8bbLnTkKq5uOQ3LVAyuL1RBJxQp_nVwTjVkivR_aaMNhwbrdJkxhDodfsguEi36wKaTyXdxicS
munVjZlUJSDb1URKPEZ0Xj6AzGrqYnl6YwyQoszxdP_vzA5-rVtEsJ9rarM_rv0VpNFDK3MMcnsesO_C
JYIMb1qTyZN856oCvUmK7aUVjdzxtUpw"
--------------- 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/clr/v2p0/context-2.0.1.json",
"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",
"ClrCredential"
],
"issuer": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
],
"name": "Example University"
},
"validFrom": "2010-01-01T00:00:00Z",
"name": "Sample Transcript",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"type": [
"ClrSubject"
],
"verifiableCredential": [
"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6IlJTQ
SIsIm4iOiIxN2o1OUVTUjd1ak03WVR4aFlXM0JlZ0xaWFAtWTBDZmhpVHQzS2NMZVE0aHBOWUlMRzZFe
jc1NWltQW1sbU1ocmFFODJWYUNVNmR1eGVZcHE0alFjZkdRdGlDQjFjOUp5M243R1JQZmVTNzZGanM0R
2JUVnB1YTZxMW5IdWRTeGh0bDdDeW9JMWRyZmZrSnpMTEFwQ0VwajFlUlI4YmJMblRrS3E1dU9RM0xWQ
Xl1TDFSQkp4UXBfblZ3VGpWa2l2Ul9hYU1OaHdicmRKa3hoRG9kZnNndUVpMzZ3S2FUeVhkeGljU211b
lZqWmxVSlNEYjFVUktQRVowWGo2QXpHcnFZbmw2WXd5UW9zenhkUF92ekE1LXJWdEVzSjlyYXJNX3J2M
FZwTkZESzNNTWNuc2VzT19DSllJTWIxcVR5Wk44NTZvQ3ZVbUs3YVVWamR6eHRVcHcifX0.eyJAY29ud
GV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwua
W1zZ2xvYmFsLm9yZy9zcGVjL29iL3YzcDAvY29udGV4dC0zLjAuMy5qc29uIiwiaHR0cHM6Ly9wdXJsL
mltc2dsb2JhbC5vcmcvc3BlYy9vYi92M3AwL2V4dGVuc2lvbnMuanNvbiJdLCJpZCI6InVybjp1dWlkO
jkxNTM3ZGJhLTU2Y2ItMTFlYy1iZjYzLTAyNDJhYzEzMDAwMiIsInR5cGUiOlsiVmVyaWZpYWJsZUNyZ
WRlbnRpYWwiLCJBY2hpZXZlbWVudENyZWRlbnRpYWwiXSwiaXNzdWVyIjp7ImlkIjoiaHR0cHM6Ly9le
GFtcGxlLmVkdS9pc3N1ZXJzLzU2NTA0OSIsInR5cGUiOlsiUHJvZmlsZSJdLCJuYW1lIjoiRXhhbXBsZ
SBVbml2ZXJzaXR5In0sInZhbGlkRnJvbSI6IjIwMTAtMDEtMDFUMDA6MDA6MDBaIiwibmFtZSI6IkV4Y
W1wbGUgVW5pdmVyc2l0eSBEZWdyZWUiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDpleGFtc
GxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMyMSIsInR5cGUiOlsiQWNoaWV2ZW1lbnRTdWJqZWN0I
l0sImFjaGlldmVtZW50Ijp7ImlkIjoidXJuOnV1aWQ6YTc0NjdlZjYtNTZjYi0xMWVjLWJmNjMtMDI0M
mFjMTMwMDAyIiwidHlwZSI6WyJBY2hpZXZlbWVudCJdLCJjcmVhdG9yIjp7ImlkIjoiaHR0cHM6Ly9le
GFtcGxlLmVkdS9pc3N1ZXJzLzU2NTA0OSIsInR5cGUiOlsiUHJvZmlsZSJdfSwibmFtZSI6IkFjaGlld
mVtZW50IDEiLCJjcml0ZXJpYSI6eyJpZCI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvYWNoaWV2ZW1lbnRzL
2E3NDY3ZWY2LTU2Y2ItMTFlYy1iZjYzLTAyNDJhYzEzMDAwMi9jcml0ZXJpYSJ9LCJkZXNjcmlwdGlvb
iI6IkFjaGlldmVtZW50IDEiLCJpbWFnZSI6eyJpZCI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvYWNoaWV2Z
W1lbnRzL3NhbXBsZS5wbmciLCJ0eXBlIjoiSW1hZ2UifX19LCJjcmVkZW50aWFsU2NoZW1hIjpbeyJpZ
CI6Imh0dHBzOi8vcHVybC5pbXNnbG9iYWwub3JnL3NwZWMvY2xyL3YycDAvc2NoZW1hL2pzb24vY2xyX
3YycDBfY2xyY3JlZGVudGlhbF9zY2hlbWEuanNvbiIsInR5cGUiOiIxRWRUZWNoSnNvblNjaGVtYVZhb
GlkYXRvcjIwMTkifV0sImlzcyI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvaXNzdWVycy81NjUwNDkiLCJqd
GkiOiJ1cm46dXVpZDo5MTUzN2RiYS01NmNiLTExZWMtYmY2My0wMjQyYWMxMzAwMDIiLCJzdWIiOiJka
WQ6ZXhhbXBsZTplYmZlYjFmNzEyZWJjNmYxYzI3NmUxMmVjMjEifQ.MAkGDFh4cHndTaYvVvGu2ojk3I
rsqSO6NjvKxXzP2dRfgNS7fnFmHRiqoWNoM3RKtprc-G6_RrrLjlXqYb8vAtj8KC3Sg8ZuYiyJmn63y-
P02nn5-u9_sGiM2tP9EkQazd1GjBqjgioW08IFKzT9PxVOvUAcaJZr6Hj1JG4mb20Brpj5ylsa9XAD_i
rTesa-ReR49d8bMsT7J2n1rG15rLJtuwwAT1lfwrvOdoRGAwsqh4L5kx4MUof_n-50HXLQBu07quWAZt
iz3isyoemtWPcuTHV5Y7smcv01ulDRyuDsncQJ7-Ra1ltMpezbgpoMFQbKGeXfD0eq9BjZ4dNVug"
],
"achievement": [
"id": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 1",
"criteria": {
"id": "https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac
130002/criteria"
},
"description": "Achievement 1",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
},
"id": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 2",
"criteria": {
"id": "https://example.edu/achievements/dd887f0a-56cb-11ec-bf63-0242ac
130002/criteria"
},
"description": "Achievement 2",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
],
"association": [
"type": "Association",
"associationType": "isParentOf",
"sourceId": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"targetId": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
},
"credentialSchema": [
"id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_achie
vementcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
],
"iss": "https://example.edu/issuers/565049",
"jti": "http://example.edu/credentials/3732",
"sub": "did:example:ebfeb1f712ebc6f1c276e12ec21"
--------------- JWT ---------------
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6IlJTQSIsIm4i
OiIxN2o1OUVTUjd1ak03WVR4aFlXM0JlZ0xaWFAtWTBDZmhpVHQzS2NMZVE0aHBOWUlMRzZFejc1NWlt
QW1sbU1ocmFFODJWYUNVNmR1eGVZcHE0alFjZkdRdGlDQjFjOUp5M243R1JQZmVTNzZGanM0R2JUVnB1
YTZxMW5IdWRTeGh0bDdDeW9JMWRyZmZrSnpMTEFwQ0VwajFlUlI4YmJMblRrS3E1dU9RM0xWQXl1TDFS
Qkp4UXBfblZ3VGpWa2l2Ul9hYU1OaHdicmRKa3hoRG9kZnNndUVpMzZ3S2FUeVhkeGljU211blZqWmxV
SlNEYjFVUktQRVowWGo2QXpHcnFZbmw2WXd5UW9zenhkUF92ekE1LXJWdEVzSjlyYXJNX3J2MFZwTkZE
SzNNTWNuc2VzT19DSllJTWIxcVR5Wk44NTZvQ3ZVbUs3YVVWamR6eHRVcHcifX0.eyJAY29udGV4dCI6
WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwuaW1zZ2xv
YmFsLm9yZy9zcGVjL2Nsci92MnAwL2NvbnRleHQtMi4wLjEuanNvbiIsImh0dHBzOi8vcHVybC5pbXNn
bG9iYWwub3JnL3NwZWMvb2IvdjNwMC9jb250ZXh0LTMuMC4zLmpzb24iLCJodHRwczovL3B1cmwuaW1z
Z2xvYmFsLm9yZy9zcGVjL29iL3YzcDAvZXh0ZW5zaW9ucy5qc29uIl0sImlkIjoiaHR0cDovL2V4YW1w
bGUuZWR1L2NyZWRlbnRpYWxzLzM3MzIiLCJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiQ2xy
Q3JlZGVudGlhbCJdLCJpc3N1ZXIiOnsiaWQiOiJodHRwczovL2V4YW1wbGUuZWR1L2lzc3VlcnMvNTY1
MDQ5IiwidHlwZSI6WyJQcm9maWxlIl0sIm5hbWUiOiJFeGFtcGxlIFVuaXZlcnNpdHkifSwidmFsaWRG
cm9tIjoiMjAxMC0wMS0wMVQwMDowMDowMFoiLCJuYW1lIjoiU2FtcGxlIFRyYW5zY3JpcHQiLCJjcmVk
ZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMy
MSIsInR5cGUiOlsiQ2xyU3ViamVjdCJdLCJ2ZXJpZmlhYmxlQ3JlZGVudGlhbCI6WyJleUpoYkdjaU9p
SlNVekkxTmlJc0luUjVjQ0k2SWtwWFZDSXNJbXAzYXlJNmV5SmxJam9pUVZGQlFpSXNJbXQwZVNJNkls
SlRRU0lzSW00aU9pSXhOMm8xT1VWVFVqZDFhazAzV1ZSNGFGbFhNMEpsWjB4YVdGQXRXVEJEWm1ocFZI
UXpTMk5NWlZFMGFIQk9XVWxNUnpaRmVqYzFOV2x0UVcxc2JVMW9jbUZGT0RKV1lVTlZObVIxZUdWWmNI
RTBhbEZqWmtkUmRHbERRakZqT1VwNU0yNDNSMUpRWm1WVE56Wkdhbk0wUjJKVVZuQjFZVFp4TVc1SWRX
UlRlR2gwYkRkRGVXOUpNV1J5Wm1aclNucE1URUZ3UTBWd2FqRmxVbEk0WW1KTWJsUnJTM0UxZFU5Uk0w
eFdRWGwxVERGU1FrcDRVWEJmYmxaM1ZHcFdhMmwyVWw5aFlVMU9hSGRpY21SS2EzaG9SRzlrWm5ObmRV
VnBNelozUzJGVWVWaGtlR2xqVTIxMWJsWnFXbXhWU2xORVlqRlZVa3RRUlZvd1dHbzJRWHBIY25GWmJt
dzJXWGQ1VVc5emVuaGtVRjkyZWtFMUxYSldkRVZ6U2pseVlYSk5YM0oyTUZad1RrWkVTek5OVFdOdWMy
VnpUMTlEU2xsSlRXSXhjVlI1V2s0NE5UWnZRM1pWYlVzM1lWVldhbVI2ZUhSVmNIY2lmWDAuZXlKQVky
OXVkR1Y0ZENJNld5Sm9kSFJ3Y3pvdkwzZDNkeTUzTXk1dmNtY3Zibk12WTNKbFpHVnVkR2xoYkhNdmRq
SWlMQ0pvZEhSd2N6b3ZMM0IxY213dWFXMXpaMnh2WW1Gc0xtOXlaeTl6Y0dWakwyOWlMM1l6Y0RBdlky
OXVkR1Y0ZEMwekxqQXVNeTVxYzI5dUlpd2lhSFIwY0hNNkx5OXdkWEpzTG1sdGMyZHNiMkpoYkM1dmNt
Y3ZjM0JsWXk5dllpOTJNM0F3TDJWNGRHVnVjMmx2Ym5NdWFuTnZiaUpkTENKcFpDSTZJblZ5YmpwMWRX
bGtPamt4TlRNM1pHSmhMVFUyWTJJdE1URmxZeTFpWmpZekxUQXlOREpoWXpFek1EQXdNaUlzSW5SNWNH
VWlPbHNpVm1WeWFXWnBZV0pzWlVOeVpXUmxiblJwWVd3aUxDSkJZMmhwWlhabGJXVnVkRU55WldSbGJu
UnBZV3dpWFN3aWFYTnpkV1Z5SWpwN0ltbGtJam9pYUhSMGNITTZMeTlsZUdGdGNHeGxMbVZrZFM5cGMz
TjFaWEp6THpVMk5UQTBPU0lzSW5SNWNHVWlPbHNpVUhKdlptbHNaU0pkTENKdVlXMWxJam9pUlhoaGJY
QnNaU0JWYm1sMlpYSnphWFI1SW4wc0luWmhiR2xrUm5KdmJTSTZJakl3TVRBdE1ERXRNREZVTURBNk1E
QTZNREJhSWl3aWJtRnRaU0k2SWtWNFlXMXdiR1VnVlc1cGRtVnljMmwwZVNCRVpXZHlaV1VpTENKamNt
VmtaVzUwYVdGc1UzVmlhbVZqZENJNmV5SnBaQ0k2SW1ScFpEcGxlR0Z0Y0d4bE9tVmlabVZpTVdZM01U
SmxZbU0yWmpGak1qYzJaVEV5WldNeU1TSXNJblI1Y0dVaU9sc2lRV05vYVdWMlpXMWxiblJUZFdKcVpX
TjBJbDBzSW1GamFHbGxkbVZ0Wlc1MElqcDdJbWxrSWpvaWRYSnVPblYxYVdRNllUYzBOamRsWmpZdE5U
WmpZaTB4TVdWakxXSm1Oak10TURJME1tRmpNVE13TURBeUlpd2lkSGx3WlNJNld5SkJZMmhwWlhabGJX
VnVkQ0pkTENKamNtVmhkRzl5SWpwN0ltbGtJam9pYUhSMGNITTZMeTlsZUdGdGNHeGxMbVZrZFM5cGMz
TjFaWEp6THpVMk5UQTBPU0lzSW5SNWNHVWlPbHNpVUhKdlptbHNaU0pkZlN3aWJtRnRaU0k2SWtGamFH
bGxkbVZ0Wlc1MElERWlMQ0pqY21sMFpYSnBZU0k2ZXlKcFpDSTZJbWgwZEhCek9pOHZaWGhoYlhCc1pT
NWxaSFV2WVdOb2FXVjJaVzFsYm5SekwyRTNORFkzWldZMkxUVTJZMkl0TVRGbFl5MWlaall6TFRBeU5E
SmhZekV6TURBd01pOWpjbWwwWlhKcFlTSjlMQ0prWlhOamNtbHdkR2x2YmlJNklrRmphR2xsZG1WdFpX
NTBJREVpTENKcGJXRm5aU0k2ZXlKcFpDSTZJbWgwZEhCek9pOHZaWGhoYlhCc1pTNWxaSFV2WVdOb2FX
VjJaVzFsYm5SekwzTmhiWEJzWlM1d2JtY2lMQ0owZVhCbElqb2lTVzFoWjJVaWZYMTlMQ0pqY21Wa1pX
NTBhV0ZzVTJOb1pXMWhJanBiZXlKcFpDSTZJbWgwZEhCek9pOHZjSFZ5YkM1cGJYTm5iRzlpWVd3dWIz
Sm5MM053WldNdlkyeHlMM1l5Y0RBdmMyTm9aVzFoTDJwemIyNHZZMnh5WDNZeWNEQmZZMnh5WTNKbFpH
VnVkR2xoYkY5elkyaGxiV0V1YW5OdmJpSXNJblI1Y0dVaU9pSXhSV1JVWldOb1NuTnZibE5qYUdWdFlW
WmhiR2xrWVhSdmNqSXdNVGtpZlYwc0ltbHpjeUk2SW1oMGRIQnpPaTh2WlhoaGJYQnNaUzVsWkhVdmFY
TnpkV1Z5Y3k4MU5qVXdORGtpTENKcWRHa2lPaUoxY200NmRYVnBaRG81TVRVek4yUmlZUzAxTm1OaUxU
RXhaV010WW1ZMk15MHdNalF5WVdNeE16QXdNRElpTENKemRXSWlPaUprYVdRNlpYaGhiWEJzWlRwbFlt
WmxZakZtTnpFeVpXSmpObVl4WXpJM05tVXhNbVZqTWpFaWZRLk1Ba0dERmg0Y0huZFRhWXZWdkd1Mm9q
azNJcnNxU082Tmp2S3hYelAyZFJmZ05TN2ZuRm1IUmlxb1dOb00zUkt0cHJjLUc2X1JyckxqbFhxWWI4
dkF0ajhLQzNTZzhadVlpeUptbjYzeS1QMDJubjUtdTlfc0dpTTJ0UDlFa1FhemQxR2pCcWpnaW9XMDhJ
Rkt6VDlQeFZPdlVBY2FKWnI2SGoxSkc0bWIyMEJycGo1eWxzYTlYQURfaXJUZXNhLVJlUjQ5ZDhiTXNU
N0oybjFyRzE1ckxKdHV3d0FUMWxmd3J2T2RvUkdBd3NxaDRMNWt4NE1Vb2Zfbi01MEhYTFFCdTA3cXVX
QVp0aXozaXN5b2VtdFdQY3VUSFY1WTdzbWN2MDF1bERSeXVEc25jUUo3LVJhMWx0TXBlemJncG9NRlFi
S0dlWGZEMGVxOUJqWjRkTlZ1ZyJdLCJhY2hpZXZlbWVudCI6W3siaWQiOiJ1cm46dXVpZDphNzQ2N2Vm
Ni01NmNiLTExZWMtYmY2My0wMjQyYWMxMzAwMDIiLCJ0eXBlIjpbIkFjaGlldmVtZW50Il0sImNyZWF0
b3IiOnsiaWQiOiJodHRwczovL2V4YW1wbGUuZWR1L2lzc3VlcnMvNTY1MDQ5IiwidHlwZSI6WyJQcm9m
aWxlIl19LCJuYW1lIjoiQWNoaWV2ZW1lbnQgMSIsImNyaXRlcmlhIjp7ImlkIjoiaHR0cHM6Ly9leGFt
cGxlLmVkdS9hY2hpZXZlbWVudHMvYTc0NjdlZjYtNTZjYi0xMWVjLWJmNjMtMDI0MmFjMTMwMDAyL2Ny
aXRlcmlhIn0sImRlc2NyaXB0aW9uIjoiQWNoaWV2ZW1lbnQgMSIsImltYWdlIjp7ImlkIjoiaHR0cHM6
Ly9leGFtcGxlLmVkdS9hY2hpZXZlbWVudHMvc2FtcGxlLnBuZyIsInR5cGUiOiJJbWFnZSJ9fSx7Imlk
IjoidXJuOnV1aWQ6ZGQ4ODdmMGEtNTZjYi0xMWVjLWJmNjMtMDI0MmFjMTMwMDAyIiwidHlwZSI6WyJB
Y2hpZXZlbWVudCJdLCJjcmVhdG9yIjp7ImlkIjoiaHR0cHM6Ly9leGFtcGxlLmVkdS9pc3N1ZXJzLzU2
NTA0OSIsInR5cGUiOlsiUHJvZmlsZSJdfSwibmFtZSI6IkFjaGlldmVtZW50IDIiLCJjcml0ZXJpYSI6
eyJpZCI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvYWNoaWV2ZW1lbnRzL2RkODg3ZjBhLTU2Y2ItMTFlYy1i
ZjYzLTAyNDJhYzEzMDAwMi9jcml0ZXJpYSJ9LCJkZXNjcmlwdGlvbiI6IkFjaGlldmVtZW50IDIiLCJp
bWFnZSI6eyJpZCI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvYWNoaWV2ZW1lbnRzL3NhbXBsZS5wbmciLCJ0
eXBlIjoiSW1hZ2UifX1dLCJhc3NvY2lhdGlvbiI6W3sidHlwZSI6IkFzc29jaWF0aW9uIiwiYXNzb2Np
YXRpb25UeXBlIjoiaXNQYXJlbnRPZiIsInNvdXJjZUlkIjoidXJuOnV1aWQ6YTc0NjdlZjYtNTZjYi0x
MWVjLWJmNjMtMDI0MmFjMTMwMDAyIiwidGFyZ2V0SWQiOiJ1cm46dXVpZDpkZDg4N2YwYS01NmNiLTEx
ZWMtYmY2My0wMjQyYWMxMzAwMDIifV19LCJjcmVkZW50aWFsU2NoZW1hIjpbeyJpZCI6Imh0dHBzOi8v
cHVybC5pbXNnbG9iYWwub3JnL3NwZWMvY2xyL3YycDAvc2NoZW1hL2pzb24vY2xyX3YycDBfYWNoaWV2
ZW1lbnRjcmVkZW50aWFsX3NjaGVtYS5qc29uIiwidHlwZSI6IjFFZFRlY2hKc29uU2NoZW1hVmFsaWRh
dG9yMjAxOSJ9XSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmVkdS9pc3N1ZXJzLzU2NTA0OSIsImp0aSI6
Imh0dHA6Ly9leGFtcGxlLmVkdS9jcmVkZW50aWFscy8zNzMyIiwic3ViIjoiZGlkOmV4YW1wbGU6ZWJm
ZWIxZjcxMmViYzZmMWMyNzZlMTJlYzIxIn0.EW9bAM3vb6sP3i4H-VoQS2VquIN_KTm0azveP_HBConG
BZQ94CGo0njRi1dZy_yrMMnKH6FYbaQgO4WfD4Njj2DK2g6jgD6AvTKunVlLM7WjqbD2YIFjOArpdncq
W3-LnWAKBOmvUe3obbiYCE2-HNJ6SphPILvgmJUTxCXwsf4TV2ANk3LHRj5mFGSTQywg_Er2fx_UJiAL
jrRUHFwDf8iOFapfEJ4VFyV-bLbABZhmGl6aZ1hU4iNPl76_0euRrw9snNrKFS-Ze-ehAzMw7kukofyn
gtLTzXB02ixyxurJ-d6G-0Y9CjvgqpT7ibZjh7cIvQCDyPC2WF_bNDytHw
The credential C is the up-to-date representation because it has a more recent
validFrom
2010-03-01T00:00:00Z
).
10.
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 Comprehensive Learner Record
verifiable credential
ClrCredential
). 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 this 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 Comprehensive Learner Record
verifiable credentials
is available at
. The associated vocabulary document for the Comprehensive Learner Record Data Model is available at
. Comprehensive Learner Record
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
33
: JSON-LD @context serialization
"@context"
"https://www.w3.org/ns/credentials/v2"
"https://purl.imsglobal.org/spec/clr/v2p0/context-2.0.1.json"
"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 Comprehensive Learner Record
verifiable credentials
ClrCredential
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
ClrCredential
type
ClrCredential
credentialSchema
ClrCredential
ClrCredential
proof
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
ClrCredential Data Models
The data models in this section are specific to
Comprehensive Learner Record Standard v2.0
B.1.1
ClrCredential
A ClrCredential is a CLR with all the properties needed to conform with a Verifiable Credential as defined in the [
VC-DATA-MODEL-2.0
].
Property
Type
Description
Multiplicity
@context
Context
The value of the
@context
property
MUST
be an ordered set where the first three items are the URLs
[3..*]
type
IRI
The value of the type property
MUST
be an unordered set. One of the items
MUST
be the IRI
VerifiableCredential
, and one of the items
MUST
be the IRI
ClrCredential
[1..*]
id
URI
Unambiguous reference to the credential.
[1]
name
String
The name of the CLR. May be displayed by wallet user interfaces.
[1]
description
String
Optional description of the CLR. May be displayed by wallet user interfaces.
[0..1]
endorsement
EndorsementCredential
Allows endorsers to make specific claims about the ClrCredential, or any AssertionCredential, Achievement, or Profile referenced in the ClrCredential. These endorsements are signed with a Data Integrity proof format.
[0..*]
endorsementJwt
CompactJws
Allows endorsers to make specific claims about the ClrCredential, or any AssertionCredential, Achievement, or Profile referenced in the ClrCredential. These endorsements are signed with the VC-JWT proof format.
[0..*]
image
Image
Optional image representing the CLR. May be displayed by wallet user interfaces. If present,
MUST
represent a PNG or SVG image.
MAY
be a 'baked' image.
[0..1]
partial
Boolean
True if CLR does not contain all the assertions known by the publisher for the learner at the time the CLR is issued. Useful if you are sending a small set of achievements in real time when they are achieved. If False or omitted, the CLR
SHOULD
be interpreted as containing all the assertions for the learner known by the publisher at the time of issue.
[0..1]
credentialSubject
ClrSubject
The learner that is the subject of this CLR credential.
[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.2
ClrSubject
A collection of information about the learner that is the subject of this CLR credential.
Property
Type
Description
Multiplicity
id
URI
An identifier for the recipient of the CLR credential. Either
id
or at least one
identifier
is required.
[0..1]
type
IRI
The property
MUST
contain the IRI
ClrSubject
[1..*]
identifier
IdentityObject
Other identifiers for the recipient of the CLR credential. Either
id
or at least one
identifier
is required.
[0..*]
achievement
Achievement
The set of achievements the CLR issuer expects the learner to achieve.
[0..*]
verifiableCredential
VerifiableCredential
A set of AchievementCredentials, OpenBadgeCredentials, and other VerifiableCredentials the learner has been awarded. The credential issuers may not be the same entity as the ClrCredential issuer, but the ClrCredential's credential subject is guaranteed to be the same person as the credential subject of each included credential, even if they use different identifiers.
[1..*]
association
Association
Associations describe the semantic relationship between source and target achievements and their assertions.
[0..*]
This class can be extended with additional properties.
B.1.3
Association
An Association describes the semantic relationship between two achievements and the credentials that assert those achievements.
Property
Type
Description
Multiplicity
type
IRI
The value of the type property
MUST
be 'Association'.
[1]
associationType
AssociationType Enumeration
The type of relationship between a source achievement and a target achievement. For example the source achievement is the child of the target achievement.
[1]
sourceId
URI
The
id
of the source achievement.
[1]
targetId
URI
The
id
of the target achievement.
[1]
B.1.4
AssociationType Enumeration
A vocabulary of association types. Associations describe the semantic relationship between two achievements.
Term
Description
exactMatchOf
The target is derived from the source.
isChildOf
To represent the structural relationship in a taxonomy between parent and child. The source is a child of the target.
isParentOf
To represent the structural relationship in a taxonomy between parent and child. The source is a parent of the target.
isPartOf
The source of the association is included either physically or logically in the target. This classifies an Achievement as being logically or semantically contained as a subset of the target.
isPeerOf
The source is a peer of the target. Where IsRelatedTo is intended to show relationships within a topic or domain, isPeerOf shows an approximation of relationships across topics or domains.
isRelatedTo
The source of the association is related to the target in some way that is not better described by another association type.
precedes
The source of the association comes before the target of the association in time or order.
replacedBy
The source of the association has been supplanted by, displaced by, or superseded by the target of the association.
B.2
CLR Proof Data Models
The data models in this section are used by the
7.2
JSON Web Token Proof Format
applied to a
ClrCredential
B.2.1
ClrCredentialJwtPayload
Represents a Comprehensive Learner Record (CLR) expressed to conform with the JSON Web Token Proof Format [
VC-JOSE-COSE
]. Nested credentials are represented as Compact JWS strings.
Property
Type
Description
Multiplicity
credentialSubject
ClrSubjectJwtPayload
Claims about the learner.
[1]
@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]
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..*]
@context
Context
The value of the
@context
property
MUST
be an ordered set where the first three items are the URLs
[3..*]
type
IRI
The value of the type property
MUST
be an unordered set. One of the items
MUST
be the IRI
VerifiableCredential
, and one of the items
MUST
be the IRI
ClrCredential
[1..*]
id
URI
Unambiguous reference to the credential.
[1]
name
String
The name of the CLR. May be displayed by wallet user interfaces.
[1]
description
String
Optional description of the CLR. May be displayed by wallet user interfaces.
[0..1]
endorsement
EndorsementCredential
Allows endorsers to make specific claims about the ClrCredential, or any AssertionCredential, Achievement, or Profile referenced in the ClrCredential. These endorsements are signed with a Data Integrity proof format.
[0..*]
endorsementJwt
CompactJws
Allows endorsers to make specific claims about the ClrCredential, or any AssertionCredential, Achievement, or Profile referenced in the ClrCredential. These endorsements are signed with the VC-JWT proof format.
[0..*]
image
Image
Optional image representing the CLR. May be displayed by wallet user interfaces. If present,
MUST
represent a PNG or SVG image.
MAY
be a 'baked' image.
[0..1]
partial
Boolean
True if CLR does not contain all the assertions known by the publisher for the learner at the time the CLR is issued. Useful if you are sending a small set of achievements in real time when they are achieved. If False or omitted, the CLR
SHOULD
be interpreted as containing all the assertions for the learner known by the publisher at the time of issue.
[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]
This class can be extended with additional properties.
B.2.2
ClrSubjectJwtPayload
Claims about the subject learner.
Property
Type
Description
Multiplicity
verifiableCredential
CompactJws
The set of achievements the publisher claims have been awarded to the learner in Compact JWS format. The CLR issuer publisher may not be the same entity as the assertion issuers, but the CLR subject
MUST
be the same entity as the assertion subjects even if they have different indentifiers.
[1..*]
id
URI
The identity of the credential subject.
[0..1]
id
URI
An identifier for the recipient of the CLR credential. Either
id
or at least one
identifier
is required.
[0..1]
type
IRI
The property
MUST
contain the IRI
ClrSubject
[1..*]
identifier
IdentityObject
Other identifiers for the recipient of the CLR credential. Either
id
or at least one
identifier
is required.
[0..*]
achievement
Achievement
The set of achievements the CLR issuer expects the learner to achieve.
[0..*]
association
Association
Associations describe the semantic relationship between source and target achievements and their assertions.
[0..*]
This class can be extended with additional properties.
B.3
CLR API Data Models
The data models in this section are used by the
5.
CLR Standard API
B.3.1
GetClrCredentialsResponse
Property
Type
Description
Multiplicity
credential
ClrCredential
ClrCredentials that have not been signed with the VC-JWT Proof Format
MUST
be in the
credential
array.
[0..*]
compactJwsString
CompactJws
ClrCredentials that have been signed with the VC-JWT Proof Format
MUST
be in the
compactJwsString
array.
[0..*]
B.4
Shared 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.4.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.4.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
7.
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.4.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.4.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.4.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.4.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.4.7
EndorsementCredential
A verifiable credential that asserts a claim about an entity. As described in
7.
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.4.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.4.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.4.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.4.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.4.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.4.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.4.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.4.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.4.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.4.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.4.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.4.19
VerifiableCredential
A Verifiable Credential as defined in the [
VC-DATA-MODEL-2.0
]. As described in
7.
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.4.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.4.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.4.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.4.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.4.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.4.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.4.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.4.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.4.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.4.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.4.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.4.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.4.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.5
Shared API Security Data Models
The data models in this section are shared by all 1EdTech service specifications.
B.5.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 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.5.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.5.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.5.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.5.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.6
Shared API Data Models
The data models in this section are shared by all 1EdTech service specifications.
B.6.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.6.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.6.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.6.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.6.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.6.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.7
Shared OAuth 2.0 Models
The data models in this section are shared by all 1EdTech service specifications.
B.7.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.7.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.7.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.8
Shared Proof Models
The data models for the JSON Web Token Proof Format (VC-JWT) [
VC-DATA-MODEL-2.0
] is shared by all 1EdTech Digital Credentials specifications.
B.8.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.8.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.8.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.9
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.10
Primitive Types
The primitive types in this section are shared by all 1EdTech specifications.
Type
Description
Boolean
A boolean, expressed as
true
or
false
Date
An [
ISO8601
] calendar date using the syntax YYYY-MM-DD.
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.11
Verification Support Data Models
The data models in this section are used by the
8.
Verification and Validation
process for supporting older credentials created with [
VC-DATA-MODEL
].
B.11.1
AnyClrCredential
AnyClrCredential represents an ClrCredential that might be built using [
VC-DATA-MODEL
] or [
VC-DATA-MODEL-2.0
]. The scope of this class is only for verification purposes. It is not intended to be used in the creation of new credentials, where the [[[#clrcredential]] 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
ClrCredentialv1p1
A ClrCredential is a CLR with all the properties needed to conform with a Verifiable Credential as defined in the [
VC-DATA-MODEL
].
ClrCredential
A ClrCredential is a CLR with all the properties needed to conform with a Verifiable Credential as defined in the [
VC-DATA-MODEL-2.0
].
B.11.2
ClrCredentialv1p1
A ClrCredential is a CLR with all the properties needed to conform with a Verifiable Credential as defined in the [
VC-DATA-MODEL
].
Property
Type
Description
Multiplicity
@context
Context
The value of the
@context
property
MUST
be an ordered set where the first three items are the URLs
[1..*]
type
IRI
The value of the type property
MUST
be an unordered set. One of the items
MUST
be the IRI
VerifiableCredential
, and one of the items
MUST
be the IRI
ClrCredential
[1..*]
id
URI
Unambiguous reference to the credential.
[1]
name
String
The name of the CLR. May be displayed by wallet user interfaces.
[1]
description
String
Optional description of the CLR. May be displayed by wallet user interfaces.
[0..1]
endorsement
EndorsementCredentialv1p1
Allows endorsers to make specific claims about the ClrCredential, or any AssertionCredential, Achievement, or Profile referenced in the ClrCredential. These endorsements are signed with a Data Integrity proof format.
[0..*]
endorsementJwt
CompactJws
Allows endorsers to make specific claims about the ClrCredential, or any AssertionCredential, Achievement, or Profile referenced in the ClrCredential. These endorsements are signed with the VC-JWT proof format.
[0..*]
image
Image
Optional image representing the CLR. May be displayed by wallet user interfaces. If present,
MUST
represent a PNG or SVG image.
MAY
be a 'baked' image.
[0..1]
partial
Boolean
True if CLR does not contain all the assertions known by the publisher for the learner at the time the CLR is issued. Useful if you are sending a small set of achievements in real time when they are achieved. If False or omitted, the CLR
SHOULD
be interpreted as containing all the assertions for the learner known by the publisher at the time of issue.
[0..1]
credentialSubject
ClrSubjectv1p1
The learner that is the subject of this CLR credential.
[1]
awardedDate
DateTimeZ
Timestamp of when the credential was awarded.
issuanceDate
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
issuanceDate
, 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.11.3
ClrSubjectv1p1
A collection of information about the learner that is the subject of this CLR credential.
Property
Type
Description
Multiplicity
id
URI
An identifier for the recipient of the CLR credential. Either
id
or at least one
identifier
is required.
[0..1]
type
IRI
The property
MUST
contain the IRI
ClrSubject
[1..*]
identifier
IdentityObject
Other identifiers for the recipient of the CLR credential. Either
id
or at least one
identifier
is required.
[0..*]
achievement
Achievementv1p1
The set of achievements the CLR issuer expects the learner to achieve.
[0..*]
verifiableCredential
VerifiableCredentialv1p1
A set of AchievementCredentials, OpenBadgeCredentials, and other VerifiableCredentials the learner has been awarded. The credential issuers may not be the same entity as the ClrCredential issuer, but the ClrCredential's credential subject is guaranteed to be the same person as the credential subject of each included credential, even if they use different identifiers.
[1..*]
association
Association
Associations describe the semantic relationship between source and target achievements and their assertions.
[0..*]
This class can be extended with additional properties.
B.12
Shared Verification Support Data Models
The data models in this section are shared by
Open Badges Specification v3.0
and
Comprehensive Learner Record Standard v2.0
B.12.1
AnyAchievementCredential
AnyAchievementCredential represents an AchievementCredential that might be built using [
VC-DATA-MODEL
] or [
VC-DATA-MODEL-2.0
]. The scope of this class is only for verification purposes. It is not intended to be used in the creation of new credentials, where the
B.4.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
7.
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
7.
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.12.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
7.
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.12.3
AnyEndorsementCredential
AnyEndorsementCredential represents an EndorsementCredential that might be built using [
VC-DATA-MODEL
] or [
VC-DATA-MODEL-2.0
]. The scope of this class is only for verification purposes. It is not intended to be used in the creation of new credentials, where the [[[#endorsementcredential]] class
MUST
be used.
The ultimate representation of this class is a choice of exactly one of the classes in the following set:
Type
Description
EndorsementCredentialv1p1
A verifiable credential that asserts a claim about an entity. As described in
7.
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
7.
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.12.4
EndorsementCredentialv1p1
A verifiable credential that asserts a claim about an entity. As described in
7.
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.12.5
VerifiableCredentialv1p1
A Verifiable Credential as defined in the [
VC-DATA-MODEL
]. As described in
7.
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.12.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.12.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.12.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 this 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 a 1EdTech specification consists of a set of new constraints. In general a 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 ClrCredential
Example
34
: Basic ClrCredential
Credential
Verifiable Credential (with proof)
Verifiable Credential (as JWT)
"@context"
"https://www.w3.org/ns/credentials/v2"
"https://purl.imsglobal.org/spec/clr/v2p0/context-2.0.1.json"
"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"
"ClrCredential"
"issuer"
"id"
"https://example.edu/issuers/565049"
"type"
"Profile"
"name"
"Example University"
"validFrom"
"2010-01-01T00:00:00Z"
"name"
"Sample Transcript"
"credentialSubject"
"id"
"did:example:ebfeb1f712ebc6f1c276e12ec21"
"type"
"ClrSubject"
"verifiableCredential"
"@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"
"urn:uuid:91537dba-56cb-11ec-bf63-0242ac130002"
"type"
"VerifiableCredential"
"AchievementCredential"
"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"
"urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002"
"type"
"Achievement"
"creator"
"id"
"https://example.edu/issuers/565049"
"type"
"Profile"
"name"
"Achievement 1"
"criteria"
"id"
"https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac130002/criteria"
"description"
"Achievement 1"
"image"
"id"
"https://example.edu/achievements/sample.png"
"type"
"Image"
"credentialSchema"
"id"
"https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementcredential_schema.json"
"type"
"1EdTechJsonSchemaValidator2019"
"achievement"
"id"
"urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002"
"type"
"Achievement"
"creator"
"id"
"https://example.edu/issuers/565049"
"type"
"Profile"
"name"
"Achievement 1"
"criteria"
"id"
"https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac130002/criteria"
"description"
"Achievement 1"
"image"
"id"
"https://example.edu/achievements/sample.png"
"type"
"Image"
"id"
"urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
"type"
"Achievement"
"creator"
"id"
"https://example.edu/issuers/565049"
"type"
"Profile"
"name"
"Achievement 2"
"criteria"
"id"
"https://example.edu/achievements/dd887f0a-56cb-11ec-bf63-0242ac130002/criteria"
"description"
"Achievement 2"
"image"
"id"
"https://example.edu/achievements/sample.png"
"type"
"Image"
"association"
"type"
"Association"
"associationType"
"isParentOf"
"sourceId"
"urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002"
"targetId"
"urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
"credentialSchema"
"id"
"https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_clrcredential_schema.json"
"type"
"1EdTechJsonSchemaValidator2019"
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/clr/v2p0/context-2.0.1.json",
"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",
"ClrCredential"
],
"issuer": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
],
"name": "Example University"
},
"validFrom": "2010-01-01T00:00:00Z",
"name": "Sample Transcript",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"type": [
"ClrSubject"
],
"verifiableCredential": [
"@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": "urn:uuid:91537dba-56cb-11ec-bf63-0242ac130002",
"type": [
"VerifiableCredential",
"AchievementCredential"
],
"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": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 1",
"criteria": {
"id": "https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac130002/criteria"
},
"description": "Achievement 1",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
},
"credentialSchema": [
"id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
],
"proof": [
"type": "DataIntegrityProof",
"created": "2025-12-19T08:28:50Z",
"verificationMethod": "https://example.edu/issuers/565049#z6Mkjiro8LyB8SzRerGZiFjW1xRmMrPmrBVa7RNbsU8ui1Xi",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z2EJpWXjtqAEpynNHU7sjPg9aKTCo6qwf9ETJKSmFFKYGoYyjT2SraB36z3bJKd2jAX46nzoBukjSfPdn9RLhvAmg"
],
"achievement": [
"id": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 1",
"criteria": {
"id": "https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac130002/criteria"
},
"description": "Achievement 1",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
},
"id": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 2",
"criteria": {
"id": "https://example.edu/achievements/dd887f0a-56cb-11ec-bf63-0242ac130002/criteria"
},
"description": "Achievement 2",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
],
"association": [
"type": "Association",
"associationType": "isParentOf",
"sourceId": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"targetId": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
},
"credentialSchema": [
"id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_clrcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
],
"proof": [
"type": "DataIntegrityProof",
"created": "2025-12-19T08:28:50Z",
"verificationMethod": "https://example.edu/issuers/565049#z6Mkjiro8LyB8SzRerGZiFjW1xRmMrPmrBVa7RNbsU8ui1Xi",
"cryptosuite": "eddsa-rdfc-2022",
"proofPurpose": "assertionMethod",
"proofValue": "z2D84b5wZXJZx1y1bEpUyjnapGrHj7BuYNK98xpR86h7UQrvTPjpCRbLAzJ3EQQ8Tq9AYvZu1vnopBQtg5GizAbXX"
---------------- JWT header ---------------
"alg": "RS256",
"typ": "JWT",
"jwk": {
"e": "AQAB",
"kty": "RSA",
"n": "17j59ESR7ujM7YTxhYW3BegLZXP-Y0CfhiTt3KcLeQ4hpNYILG6Ez755imAmlmMhraE82V
aCU6duxeYpq4jQcfGQtiCB1c9Jy3n7GRPfeS76Fjs4GbTVpua6q1nHudSxhtl7CyoI1drffkJzLLApCE
pj1eRR8bbLnTkKq5uOQ3LVAyuL1RBJxQp_nVwTjVkivR_aaMNhwbrdJkxhDodfsguEi36wKaTyXdxicS
munVjZlUJSDb1URKPEZ0Xj6AzGrqYnl6YwyQoszxdP_vzA5-rVtEsJ9rarM_rv0VpNFDK3MMcnsesO_C
JYIMb1qTyZN856oCvUmK7aUVjdzxtUpw"
--------------- 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/clr/v2p0/context-2.0.1.json",
"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",
"ClrCredential"
],
"issuer": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
],
"name": "Example University"
},
"validFrom": "2010-01-01T00:00:00Z",
"name": "Sample Transcript",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"type": [
"ClrSubject"
],
"verifiableCredential": [
"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6IlJTQ
SIsIm4iOiIxN2o1OUVTUjd1ak03WVR4aFlXM0JlZ0xaWFAtWTBDZmhpVHQzS2NMZVE0aHBOWUlMRzZFe
jc1NWltQW1sbU1ocmFFODJWYUNVNmR1eGVZcHE0alFjZkdRdGlDQjFjOUp5M243R1JQZmVTNzZGanM0R
2JUVnB1YTZxMW5IdWRTeGh0bDdDeW9JMWRyZmZrSnpMTEFwQ0VwajFlUlI4YmJMblRrS3E1dU9RM0xWQ
Xl1TDFSQkp4UXBfblZ3VGpWa2l2Ul9hYU1OaHdicmRKa3hoRG9kZnNndUVpMzZ3S2FUeVhkeGljU211b
lZqWmxVSlNEYjFVUktQRVowWGo2QXpHcnFZbmw2WXd5UW9zenhkUF92ekE1LXJWdEVzSjlyYXJNX3J2M
FZwTkZESzNNTWNuc2VzT19DSllJTWIxcVR5Wk44NTZvQ3ZVbUs3YVVWamR6eHRVcHcifX0.eyJAY29ud
GV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwua
W1zZ2xvYmFsLm9yZy9zcGVjL29iL3YzcDAvY29udGV4dC0zLjAuMy5qc29uIiwiaHR0cHM6Ly9wdXJsL
mltc2dsb2JhbC5vcmcvc3BlYy9vYi92M3AwL2V4dGVuc2lvbnMuanNvbiJdLCJpZCI6InVybjp1dWlkO
jkxNTM3ZGJhLTU2Y2ItMTFlYy1iZjYzLTAyNDJhYzEzMDAwMiIsInR5cGUiOlsiVmVyaWZpYWJsZUNyZ
WRlbnRpYWwiLCJBY2hpZXZlbWVudENyZWRlbnRpYWwiXSwiaXNzdWVyIjp7ImlkIjoiaHR0cHM6Ly9le
GFtcGxlLmVkdS9pc3N1ZXJzLzU2NTA0OSIsInR5cGUiOlsiUHJvZmlsZSJdLCJuYW1lIjoiRXhhbXBsZ
SBVbml2ZXJzaXR5In0sInZhbGlkRnJvbSI6IjIwMTAtMDEtMDFUMDA6MDA6MDBaIiwibmFtZSI6IkV4Y
W1wbGUgVW5pdmVyc2l0eSBEZWdyZWUiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDpleGFtc
GxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMyMSIsInR5cGUiOiJBY2hpZXZlbWVudFN1YmplY3QiL
CJhY2hpZXZlbWVudCI6eyJpZCI6InVybjp1dWlkOmE3NDY3ZWY2LTU2Y2ItMTFlYy1iZjYzLTAyNDJhY
zEzMDAwMiIsInR5cGUiOlsiQWNoaWV2ZW1lbnQiXSwiY3JlYXRvciI6eyJpZCI6Imh0dHBzOi8vZXhhb
XBsZS5lZHUvaXNzdWVycy81NjUwNDkiLCJ0eXBlIjpbIlByb2ZpbGUiXX0sIm5hbWUiOiJBY2hpZXZlb
WVudCAxIiwiY3JpdGVyaWEiOnsiaWQiOiJodHRwczovL2V4YW1wbGUuZWR1L2FjaGlldmVtZW50cy9hN
zQ2N2VmNi01NmNiLTExZWMtYmY2My0wMjQyYWMxMzAwMDIvY3JpdGVyaWEifSwiZGVzY3JpcHRpb24iO
iJBY2hpZXZlbWVudCAxIiwiaW1hZ2UiOnsiaWQiOiJodHRwczovL2V4YW1wbGUuZWR1L2FjaGlldmVtZ
W50cy9zYW1wbGUucG5nIiwidHlwZSI6IkltYWdlIn19fSwiY3JlZGVudGlhbFNjaGVtYSI6W3siaWQiO
iJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL29iL3YzcDAvc2NoZW1hL2pzb24vb2JfdjNwM
F9hY2hpZXZlbWVudGNyZWRlbnRpYWxfc2NoZW1hLmpzb24iLCJ0eXBlIjoiMUVkVGVjaEpzb25TY2hlb
WFWYWxpZGF0b3IyMDE5In1dLCJpc3MiOiJodHRwczovL2V4YW1wbGUuZWR1L2lzc3VlcnMvNTY1MDQ5I
iwianRpIjoidXJuOnV1aWQ6OTE1MzdkYmEtNTZjYi0xMWVjLWJmNjMtMDI0MmFjMTMwMDAyIiwic3ViI
joiZGlkOmV4YW1wbGU6ZWJmZWIxZjcxMmViYzZmMWMyNzZlMTJlYzIxIn0.grg2tNbeNAoauoBj11euC
sSgs3Q2cjJoQeGN16hCVBOnn6NRPin3TDvM5AA5FK-rJCIGCn09NdsSX_ecPxJNx9DYhBXOMeBGVVONn
kE6NRZ-cO_N2r9-_9ilUO2d7zXWu-hy4XIHZKpEx0sHaBMqEJJD7l6BqL27PxyZysk_SJFH_4u0EFXX0
tjYyKdrCgI7O2LHSJT5sbcM-dBflF9lJLO4yej9Rvp5NMxmSrnJoZufWyxwxRHue3cu-zDiKB51vh4yL
xBzNMghPRqNO7QzsrCHQjtHPddfjGRoHIsblZj_yVNwiEUveG81ZAgHAOzfxSPcVyIIWQ6w-NNfQ0IJu
w"
],
"achievement": [
"id": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 1",
"criteria": {
"id": "https://example.edu/achievements/a7467ef6-56cb-11ec-bf63-0242ac
130002/criteria"
},
"description": "Achievement 1",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
},
"id": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002",
"type": [
"Achievement"
],
"creator": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
},
"name": "Achievement 2",
"criteria": {
"id": "https://example.edu/achievements/dd887f0a-56cb-11ec-bf63-0242ac
130002/criteria"
},
"description": "Achievement 2",
"image": {
"id": "https://example.edu/achievements/sample.png",
"type": "Image"
],
"association": [
"type": "Association",
"associationType": "isParentOf",
"sourceId": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002",
"targetId": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002"
},
"credentialSchema": [
"id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_clrcr
edential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
],
"iss": "https://example.edu/issuers/565049",
"jti": "http://example.edu/credentials/3732",
"sub": "did:example:ebfeb1f712ebc6f1c276e12ec21"
--------------- JWT ---------------
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6IlJTQSIsIm4i
OiIxN2o1OUVTUjd1ak03WVR4aFlXM0JlZ0xaWFAtWTBDZmhpVHQzS2NMZVE0aHBOWUlMRzZFejc1NWlt
QW1sbU1ocmFFODJWYUNVNmR1eGVZcHE0alFjZkdRdGlDQjFjOUp5M243R1JQZmVTNzZGanM0R2JUVnB1
YTZxMW5IdWRTeGh0bDdDeW9JMWRyZmZrSnpMTEFwQ0VwajFlUlI4YmJMblRrS3E1dU9RM0xWQXl1TDFS
Qkp4UXBfblZ3VGpWa2l2Ul9hYU1OaHdicmRKa3hoRG9kZnNndUVpMzZ3S2FUeVhkeGljU211blZqWmxV
SlNEYjFVUktQRVowWGo2QXpHcnFZbmw2WXd5UW9zenhkUF92ekE1LXJWdEVzSjlyYXJNX3J2MFZwTkZE
SzNNTWNuc2VzT19DSllJTWIxcVR5Wk44NTZvQ3ZVbUs3YVVWamR6eHRVcHcifX0.eyJAY29udGV4dCI6
WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3B1cmwuaW1zZ2xv
YmFsLm9yZy9zcGVjL2Nsci92MnAwL2NvbnRleHQtMi4wLjEuanNvbiIsImh0dHBzOi8vcHVybC5pbXNn
bG9iYWwub3JnL3NwZWMvb2IvdjNwMC9jb250ZXh0LTMuMC4zLmpzb24iLCJodHRwczovL3B1cmwuaW1z
Z2xvYmFsLm9yZy9zcGVjL29iL3YzcDAvZXh0ZW5zaW9ucy5qc29uIl0sImlkIjoiaHR0cDovL2V4YW1w
bGUuZWR1L2NyZWRlbnRpYWxzLzM3MzIiLCJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiQ2xy
Q3JlZGVudGlhbCJdLCJpc3N1ZXIiOnsiaWQiOiJodHRwczovL2V4YW1wbGUuZWR1L2lzc3VlcnMvNTY1
MDQ5IiwidHlwZSI6WyJQcm9maWxlIl0sIm5hbWUiOiJFeGFtcGxlIFVuaXZlcnNpdHkifSwidmFsaWRG
cm9tIjoiMjAxMC0wMS0wMVQwMDowMDowMFoiLCJuYW1lIjoiU2FtcGxlIFRyYW5zY3JpcHQiLCJjcmVk
ZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMy
MSIsInR5cGUiOlsiQ2xyU3ViamVjdCJdLCJ2ZXJpZmlhYmxlQ3JlZGVudGlhbCI6WyJleUpoYkdjaU9p
SlNVekkxTmlJc0luUjVjQ0k2SWtwWFZDSXNJbXAzYXlJNmV5SmxJam9pUVZGQlFpSXNJbXQwZVNJNkls
SlRRU0lzSW00aU9pSXhOMm8xT1VWVFVqZDFhazAzV1ZSNGFGbFhNMEpsWjB4YVdGQXRXVEJEWm1ocFZI
UXpTMk5NWlZFMGFIQk9XVWxNUnpaRmVqYzFOV2x0UVcxc2JVMW9jbUZGT0RKV1lVTlZObVIxZUdWWmNI
RTBhbEZqWmtkUmRHbERRakZqT1VwNU0yNDNSMUpRWm1WVE56Wkdhbk0wUjJKVVZuQjFZVFp4TVc1SWRX
UlRlR2gwYkRkRGVXOUpNV1J5Wm1aclNucE1URUZ3UTBWd2FqRmxVbEk0WW1KTWJsUnJTM0UxZFU5Uk0w
eFdRWGwxVERGU1FrcDRVWEJmYmxaM1ZHcFdhMmwyVWw5aFlVMU9hSGRpY21SS2EzaG9SRzlrWm5ObmRV
VnBNelozUzJGVWVWaGtlR2xqVTIxMWJsWnFXbXhWU2xORVlqRlZVa3RRUlZvd1dHbzJRWHBIY25GWmJt
dzJXWGQ1VVc5emVuaGtVRjkyZWtFMUxYSldkRVZ6U2pseVlYSk5YM0oyTUZad1RrWkVTek5OVFdOdWMy
VnpUMTlEU2xsSlRXSXhjVlI1V2s0NE5UWnZRM1pWYlVzM1lWVldhbVI2ZUhSVmNIY2lmWDAuZXlKQVky
OXVkR1Y0ZENJNld5Sm9kSFJ3Y3pvdkwzZDNkeTUzTXk1dmNtY3Zibk12WTNKbFpHVnVkR2xoYkhNdmRq
SWlMQ0pvZEhSd2N6b3ZMM0IxY213dWFXMXpaMnh2WW1Gc0xtOXlaeTl6Y0dWakwyOWlMM1l6Y0RBdlky
OXVkR1Y0ZEMwekxqQXVNeTVxYzI5dUlpd2lhSFIwY0hNNkx5OXdkWEpzTG1sdGMyZHNiMkpoYkM1dmNt
Y3ZjM0JsWXk5dllpOTJNM0F3TDJWNGRHVnVjMmx2Ym5NdWFuTnZiaUpkTENKcFpDSTZJblZ5YmpwMWRX
bGtPamt4TlRNM1pHSmhMVFUyWTJJdE1URmxZeTFpWmpZekxUQXlOREpoWXpFek1EQXdNaUlzSW5SNWNH
VWlPbHNpVm1WeWFXWnBZV0pzWlVOeVpXUmxiblJwWVd3aUxDSkJZMmhwWlhabGJXVnVkRU55WldSbGJu
UnBZV3dpWFN3aWFYTnpkV1Z5SWpwN0ltbGtJam9pYUhSMGNITTZMeTlsZUdGdGNHeGxMbVZrZFM5cGMz
TjFaWEp6THpVMk5UQTBPU0lzSW5SNWNHVWlPbHNpVUhKdlptbHNaU0pkTENKdVlXMWxJam9pUlhoaGJY
QnNaU0JWYm1sMlpYSnphWFI1SW4wc0luWmhiR2xrUm5KdmJTSTZJakl3TVRBdE1ERXRNREZVTURBNk1E
QTZNREJhSWl3aWJtRnRaU0k2SWtWNFlXMXdiR1VnVlc1cGRtVnljMmwwZVNCRVpXZHlaV1VpTENKamNt
VmtaVzUwYVdGc1UzVmlhbVZqZENJNmV5SnBaQ0k2SW1ScFpEcGxlR0Z0Y0d4bE9tVmlabVZpTVdZM01U
SmxZbU0yWmpGak1qYzJaVEV5WldNeU1TSXNJblI1Y0dVaU9pSkJZMmhwWlhabGJXVnVkRk4xWW1wbFkz
UWlMQ0poWTJocFpYWmxiV1Z1ZENJNmV5SnBaQ0k2SW5WeWJqcDFkV2xrT21FM05EWTNaV1kyTFRVMlky
SXRNVEZsWXkxaVpqWXpMVEF5TkRKaFl6RXpNREF3TWlJc0luUjVjR1VpT2xzaVFXTm9hV1YyWlcxbGJu
UWlYU3dpWTNKbFlYUnZjaUk2ZXlKcFpDSTZJbWgwZEhCek9pOHZaWGhoYlhCc1pTNWxaSFV2YVhOemRX
VnljeTgxTmpVd05Ea2lMQ0owZVhCbElqcGJJbEJ5YjJacGJHVWlYWDBzSW01aGJXVWlPaUpCWTJocFpY
WmxiV1Z1ZENBeElpd2lZM0pwZEdWeWFXRWlPbnNpYVdRaU9pSm9kSFJ3Y3pvdkwyVjRZVzF3YkdVdVpX
UjFMMkZqYUdsbGRtVnRaVzUwY3k5aE56UTJOMlZtTmkwMU5tTmlMVEV4WldNdFltWTJNeTB3TWpReVlX
TXhNekF3TURJdlkzSnBkR1Z5YVdFaWZTd2laR1Z6WTNKcGNIUnBiMjRpT2lKQlkyaHBaWFpsYldWdWRD
QXhJaXdpYVcxaFoyVWlPbnNpYVdRaU9pSm9kSFJ3Y3pvdkwyVjRZVzF3YkdVdVpXUjFMMkZqYUdsbGRt
VnRaVzUwY3k5ellXMXdiR1V1Y0c1bklpd2lkSGx3WlNJNklrbHRZV2RsSW4xOWZTd2lZM0psWkdWdWRH
bGhiRk5qYUdWdFlTSTZXM3NpYVdRaU9pSm9kSFJ3Y3pvdkwzQjFjbXd1YVcxeloyeHZZbUZzTG05eVp5
OXpjR1ZqTDI5aUwzWXpjREF2YzJOb1pXMWhMMnB6YjI0dmIySmZkak53TUY5aFkyaHBaWFpsYldWdWRH
TnlaV1JsYm5ScFlXeGZjMk5vWlcxaExtcHpiMjRpTENKMGVYQmxJam9pTVVWa1ZHVmphRXB6YjI1VFky
aGxiV0ZXWVd4cFpHRjBiM0l5TURFNUluMWRMQ0pwYzNNaU9pSm9kSFJ3Y3pvdkwyVjRZVzF3YkdVdVpX
UjFMMmx6YzNWbGNuTXZOVFkxTURRNUlpd2lhblJwSWpvaWRYSnVPblYxYVdRNk9URTFNemRrWW1FdE5U
WmpZaTB4TVdWakxXSm1Oak10TURJME1tRmpNVE13TURBeUlpd2ljM1ZpSWpvaVpHbGtPbVY0WVcxd2JH
VTZaV0ptWldJeFpqY3hNbVZpWXpabU1XTXlOelpsTVRKbFl6SXhJbjAuZ3JnMnROYmVOQW9hdW9CajEx
ZXVDc1NnczNRMmNqSm9RZUdOMTZoQ1ZCT25uNk5SUGluM1REdk01QUE1RkstckpDSUdDbjA5TmRzU1hf
ZWNQeEpOeDlEWWhCWE9NZUJHVlZPTm5rRTZOUlotY09fTjJyOS1fOWlsVU8yZDd6WFd1LWh5NFhJSFpL
cEV4MHNIYUJNcUVKSkQ3bDZCcUwyN1B4eVp5c2tfU0pGSF80dTBFRlhYMHRqWXlLZHJDZ0k3TzJMSFNK
VDVzYmNNLWRCZmxGOWxKTE80eWVqOVJ2cDVOTXhtU3JuSm9adWZXeXh3eFJIdWUzY3UtekRpS0I1MXZo
NHlMeEJ6Tk1naFBScU5PN1F6c3JDSFFqdEhQZGRmakdSb0hJc2JsWmpfeVZOd2lFVXZlRzgxWkFnSEFP
emZ4U1BjVnlJSVdRNnctTk5mUTBJSnV3Il0sImFjaGlldmVtZW50IjpbeyJpZCI6InVybjp1dWlkOmE3
NDY3ZWY2LTU2Y2ItMTFlYy1iZjYzLTAyNDJhYzEzMDAwMiIsInR5cGUiOlsiQWNoaWV2ZW1lbnQiXSwi
Y3JlYXRvciI6eyJpZCI6Imh0dHBzOi8vZXhhbXBsZS5lZHUvaXNzdWVycy81NjUwNDkiLCJ0eXBlIjpb
IlByb2ZpbGUiXX0sIm5hbWUiOiJBY2hpZXZlbWVudCAxIiwiY3JpdGVyaWEiOnsiaWQiOiJodHRwczov
L2V4YW1wbGUuZWR1L2FjaGlldmVtZW50cy9hNzQ2N2VmNi01NmNiLTExZWMtYmY2My0wMjQyYWMxMzAw
MDIvY3JpdGVyaWEifSwiZGVzY3JpcHRpb24iOiJBY2hpZXZlbWVudCAxIiwiaW1hZ2UiOnsiaWQiOiJo
dHRwczovL2V4YW1wbGUuZWR1L2FjaGlldmVtZW50cy9zYW1wbGUucG5nIiwidHlwZSI6IkltYWdlIn19
LHsiaWQiOiJ1cm46dXVpZDpkZDg4N2YwYS01NmNiLTExZWMtYmY2My0wMjQyYWMxMzAwMDIiLCJ0eXBl
IjpbIkFjaGlldmVtZW50Il0sImNyZWF0b3IiOnsiaWQiOiJodHRwczovL2V4YW1wbGUuZWR1L2lzc3Vl
cnMvNTY1MDQ5IiwidHlwZSI6WyJQcm9maWxlIl19LCJuYW1lIjoiQWNoaWV2ZW1lbnQgMiIsImNyaXRl
cmlhIjp7ImlkIjoiaHR0cHM6Ly9leGFtcGxlLmVkdS9hY2hpZXZlbWVudHMvZGQ4ODdmMGEtNTZjYi0x
MWVjLWJmNjMtMDI0MmFjMTMwMDAyL2NyaXRlcmlhIn0sImRlc2NyaXB0aW9uIjoiQWNoaWV2ZW1lbnQg
MiIsImltYWdlIjp7ImlkIjoiaHR0cHM6Ly9leGFtcGxlLmVkdS9hY2hpZXZlbWVudHMvc2FtcGxlLnBu
ZyIsInR5cGUiOiJJbWFnZSJ9fV0sImFzc29jaWF0aW9uIjpbeyJ0eXBlIjoiQXNzb2NpYXRpb24iLCJh
c3NvY2lhdGlvblR5cGUiOiJpc1BhcmVudE9mIiwic291cmNlSWQiOiJ1cm46dXVpZDphNzQ2N2VmNi01
NmNiLTExZWMtYmY2My0wMjQyYWMxMzAwMDIiLCJ0YXJnZXRJZCI6InVybjp1dWlkOmRkODg3ZjBhLTU2
Y2ItMTFlYy1iZjYzLTAyNDJhYzEzMDAwMiJ9XX0sImNyZWRlbnRpYWxTY2hlbWEiOlt7ImlkIjoiaHR0
cHM6Ly9wdXJsLmltc2dsb2JhbC5vcmcvc3BlYy9jbHIvdjJwMC9zY2hlbWEvanNvbi9jbHJfdjJwMF9j
bHJjcmVkZW50aWFsX3NjaGVtYS5qc29uIiwidHlwZSI6IjFFZFRlY2hKc29uU2NoZW1hVmFsaWRhdG9y
MjAxOSJ9XSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmVkdS9pc3N1ZXJzLzU2NTA0OSIsImp0aSI6Imh0
dHA6Ly9leGFtcGxlLmVkdS9jcmVkZW50aWFscy8zNzMyIiwic3ViIjoiZGlkOmV4YW1wbGU6ZWJmZWIx
ZjcxMmViYzZmMWMyNzZlMTJlYzIxIn0.jesmT_jGNmbdMtkIG0JjI6u9f4jop5oPw2nu_b_6svlylRCu
LXNLqP5wzFVCfEWf69iyfc5qRAu8ABN7WfKg5lo2vGTrMC_Aqy1nkfU1zO7LOHbJVcDQ_eXwIR-3unSh
YEDRX2HHHtqF7FOoz4rCa7hsx8CcxFSDqHOC6q7M5fnYy8EHH6F45AMNPamVg0i-rO7XyVJGS9BS1xm8
9QzFJbJHHTv610WAa9KmSe9_T-OBCWA3Ewu3Wj_8RXsg6xDVL8RfD1yIInEJW0eaZqRRE9eTLeFIYhpX
feNmypJH0mWgJ1n0vqGx5W3fRims9rRJ0CHB1FkkieGm9a25tnhA9w
E.
Schema
E.1
Context
"@context"
"id"
"@id"
"type"
"@type"
"ClrCredential"
"@id"
"https://purl.imsglobal.org/spec/vc/clr/vocab.html#ClrCredential"
"@context"
"id"
"@id"
"type"
"@type"
"partial"
"@id"
"https://purl.imsglobal.org/spec/vc/clr/vocab.html#partial"
"@type"
"xsd:boolean"
"ClrSubject"
"@id"
"https://purl.imsglobal.org/spec/vc/clr/vocab.html#ClrSubject"
"@context"
"id"
"@id"
"type"
"@type"
"cred"
"https://www.w3.org/2018/credentials#"
"obi"
"https://purl.imsglobal.org/spec/vc/ob/vocab.html#"
"achievement"
"@id"
"https://purl.imsglobal.org/spec/vc/clr/vocab.html#achievement"
"@type"
"obi:Achievement"
"@container"
"@set"
"association"
"@id"
"https://purl.imsglobal.org/spec/vc/clr/vocab.html#association"
"@type"
"https://purl.imsglobal.org/spec/vc/clr/vocab.html#Association"
"@container"
"@set"
"verifiableCredential"
"@id"
"https://purl.imsglobal.org/spec/vc/clr/vocab.html#verifiableCredential"
"@type"
"cred:verifiableCredential"
"@container"
"@set"
"identifier"
"@id"
"https://purl.imsglobal.org/spec/vc/clr/vocab.html#identifier-1"
"@type"
"obi:Identifier"
"@container"
"@set"
"Association"
"@id"
"https://purl.imsglobal.org/spec/vc/clr/vocab.html#Association"
"@context"
"associationType"
"@id"
"https://purl.imsglobal.org/spec/vc/clr/vocab.html#AssociationType"
"sourceId"
"@id"
"https://purl.imsglobal.org/spec/vc/clr/vocab.html#sourceId"
"@type"
"xsd:anyURI"
"targetId"
"@id"
"https://purl.imsglobal.org/spec/vc/clr/vocab.html#targetId"
"@type"
"xsd:anyURI"
E.2
JSON Schema
E.2.1
Comprehensive Learner Record Standard JSON Schema
E.2.1.1
ClrCredential
A ClrCredential is a CLR with all the properties needed to conform with a Verifiable Credential as defined in the [
VC-DATA-MODEL-2.0
].
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_clrcredential-jsonschema1.json",
"title": "JSON-LD Schema adaptation for the ClrCredential 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/clr/v2p0/schema/json/clr_v2p0_clrcredential-jsonschema1.json for the formal JSON Schema definition.",
"description": "A ClrCredential is a CLR with all the properties needed to conform with a Verifiable Credential as defined in the [[VC-DATA-MODEL-2.0]].",
"type": "object",
"properties": {
"@context": {
"oneOf": [
"$ref": "#/$defs/Context"
},
"type": "array",
"minItems": 3,
"items": [
"enum": [
"https://www.w3.org/ns/credentials/v2"
},
"type": "string",
"pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/clr\\/v2p0\\/context(-2\\.\\d\\.\\d)*\\.json$"
},
"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 IRI `VerifiableCredential`, and one of the items MUST be the IRI `ClrCredential`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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 IRI `VerifiableCredential`, and one of the items MUST be the IRI `ClrCredential`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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": [
"ClrCredential"
},
"items": {
"description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI `VerifiableCredential`, and one of the items MUST be the IRI `ClrCredential`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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 CLR. May be displayed by wallet user interfaces.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "Optional description of the CLR. May be displayed by wallet user interfaces.",
"$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 ClrCredential, or any AssertionCredential, Achievement, or Profile referenced in the ClrCredential. 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 ClrCredential, or any AssertionCredential, Achievement, or Profile referenced in the ClrCredential. 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"
},
"partial": {
"description": "True if CLR does not contain all the assertions known by the publisher for the learner at the time the CLR is issued. Useful if you are sending a small set of achievements in real time when they are achieved. If False or omitted, the CLR SHOULD be interpreted as containing all the assertions for the learner known by the publisher at the time of issue.",
"$comment": "Origin: Boolean (PrimitiveType); A boolean, expressed as `true` or `false`",
"type": "boolean"
},
"credentialSubject": {
"$ref": "#/$defs/ClrSubject"
},
"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": {
"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})?$"
},
"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
},
"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
},
"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
},
"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
},
"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
},
"ClrSubject": {
"description": "A collection of information about the learner that is the subject of this CLR credential.",
"type": "object",
"properties": {
"id": {
"description": "An identifier for the recipient of the CLR credential. Either `id` or at least one `identifier` is required.",
"$comment": "Origin: URI (DerivedType); A `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 property MUST contain the IRI `ClrSubject`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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": [
"ClrSubject"
},
"items": {
"description": "The property MUST contain the IRI `ClrSubject`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"oneOf": [
"$ref": "#/$defs/IdentityObject"
},
"type": "array",
"items": {
"$ref": "#/$defs/IdentityObject"
},
"achievement": {
"oneOf": [
"$ref": "#/$defs/Achievement"
},
"type": "array",
"items": {
"$ref": "#/$defs/Achievement"
},
"verifiableCredential": {
"oneOf": [
"$ref": "#/$defs/VerifiableCredential"
},
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/VerifiableCredential"
},
"association": {
"oneOf": [
"$ref": "#/$defs/Association"
},
"type": "array",
"items": {
"$ref": "#/$defs/Association"
},
"required": [
"type",
"verifiableCredential"
],
"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
},
"VerifiableCredential": {
"description": "A Verifiable Credential as defined in the [[VC-DATA-MODEL-2.0]]. As described in [[[#proofs-signatures]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.",
"type": "object",
"properties": {
"@context": {
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"Association": {
"description": "An Association describes the semantic relationship between two achievements and the credentials that assert those achievements.",
"type": "object",
"properties": {
"type": {
"description": "The value of the type property MUST be 'Association'.",
"$comment": "Origin: IRI (DerivedType); 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": [
"Association"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Association"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"associationType": {
"description": "The type of relationship between a source achievement and a target achievement. For example the source achievement is the child of the target achievement.",
"$comment": "Origin: AssociationType (Enumeration); A vocabulary of association types. Associations describe the semantic relationship between two achievements.",
"type": "string",
"enum": [
"exactMatchOf",
"isChildOf",
"isParentOf",
"isPartOf",
"isPeerOf",
"isRelatedTo",
"precedes",
"replacedBy"
},
"sourceId": {
"description": "The `id` of the source 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})?$"
},
"targetId": {
"description": "The `id` of the target 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})?$"
},
"required": [
"type",
"associationType",
"sourceId",
"targetId"
],
"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
},
"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
},
"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
},
"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
},
"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
},
"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.2
ClrSubject
A collection of information about the learner that is the subject of this CLR credential.
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_clrsubject-jsonschema1.json",
"title": "JSON-LD Schema adaptation for the ClrSubject 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/clr/v2p0/schema/json/clr_v2p0_clrsubject-jsonschema1.json for the formal JSON Schema definition.",
"description": "A collection of information about the learner that is the subject of this CLR credential.",
"type": "object",
"properties": {
"id": {
"description": "An identifier for the recipient of the CLR credential. Either `id` or at least one `identifier` is required.",
"$comment": "Origin: URI (DerivedType); A `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 property MUST contain the IRI `ClrSubject`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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": [
"ClrSubject"
},
"items": {
"description": "The property MUST contain the IRI `ClrSubject`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"oneOf": [
"$ref": "#/$defs/IdentityObject"
},
"type": "array",
"items": {
"$ref": "#/$defs/IdentityObject"
},
"achievement": {
"oneOf": [
"$ref": "#/$defs/Achievement"
},
"type": "array",
"items": {
"$ref": "#/$defs/Achievement"
},
"verifiableCredential": {
"oneOf": [
"$ref": "#/$defs/VerifiableCredential"
},
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/VerifiableCredential"
},
"association": {
"oneOf": [
"$ref": "#/$defs/Association"
},
"type": "array",
"items": {
"$ref": "#/$defs/Association"
},
"required": [
"type",
"verifiableCredential"
],
"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
},
"VerifiableCredential": {
"description": "A Verifiable Credential as defined in the [[VC-DATA-MODEL-2.0]]. As described in [[[#proofs-signatures]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.",
"type": "object",
"properties": {
"@context": {
"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
},
"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})?$"
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"Association": {
"description": "An Association describes the semantic relationship between two achievements and the credentials that assert those achievements.",
"type": "object",
"properties": {
"type": {
"description": "The value of the type property MUST be 'Association'.",
"$comment": "Origin: IRI (DerivedType); 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": [
"Association"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Association"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"associationType": {
"description": "The type of relationship between a source achievement and a target achievement. For example the source achievement is the child of the target achievement.",
"$comment": "Origin: AssociationType (Enumeration); A vocabulary of association types. Associations describe the semantic relationship between two achievements.",
"type": "string",
"enum": [
"exactMatchOf",
"isChildOf",
"isParentOf",
"isPartOf",
"isPeerOf",
"isRelatedTo",
"precedes",
"replacedBy"
},
"sourceId": {
"description": "The `id` of the source 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})?$"
},
"targetId": {
"description": "The `id` of the target 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})?$"
},
"required": [
"type",
"associationType",
"sourceId",
"targetId"
],
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
E.2.1.3
Association
An Association describes the semantic relationship between two achievements and the credentials that assert those achievements.
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_association-jsonschema1.json",
"title": "JSON-LD Schema adaptation for the Association 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/clr/v2p0/schema/json/clr_v2p0_association-jsonschema1.json for the formal JSON Schema definition.",
"description": "An Association describes the semantic relationship between two achievements and the credentials that assert those achievements.",
"type": "object",
"properties": {
"type": {
"description": "The value of the type property MUST be 'Association'.",
"$comment": "Origin: IRI (DerivedType); 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": [
"Association"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Association"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"associationType": {
"description": "The type of relationship between a source achievement and a target achievement. For example the source achievement is the child of the target achievement.",
"$comment": "Origin: AssociationType (Enumeration); A vocabulary of association types. Associations describe the semantic relationship between two achievements.",
"type": "string",
"enum": [
"exactMatchOf",
"isChildOf",
"isParentOf",
"isPartOf",
"isPeerOf",
"isRelatedTo",
"precedes",
"replacedBy"
},
"sourceId": {
"description": "The `id` of the source 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})?$"
},
"targetId": {
"description": "The `id` of the target 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})?$"
},
"required": [
"type",
"associationType",
"sourceId",
"targetId"
],
"additionalProperties": false
E.2.1.4
AssociationType
A vocabulary of association types. Associations describe the semantic relationship between two achievements.
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_associationtype-jsonschema1.json",
"title": "JSON-LD Schema adaptation for the AssociationType 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/clr/v2p0/schema/json/clr_v2p0_associationtype-jsonschema1.json for the formal JSON Schema definition.",
"description": "A vocabulary of association types. Associations describe the semantic relationship between two achievements.",
"type": "object",
"properties": {
"exactMatchOf": {
"description": "The target is derived from the source.",
"$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})?$"
},
"isChildOf": {
"description": "To represent the structural relationship in a taxonomy between parent and child. The source is a child of the target.",
"$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})?$"
},
"isParentOf": {
"description": "To represent the structural relationship in a taxonomy between parent and child. The source is a parent of the target.",
"$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})?$"
},
"isPartOf": {
"description": "The source of the association is included either physically or logically in the target. This classifies an Achievement as being logically or semantically contained as a subset of the target.",
"$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})?$"
},
"isPeerOf": {
"description": "The source is a peer of the target. Where IsRelatedTo is intended to show relationships within a topic or domain, isPeerOf shows an approximation of relationships across topics or domains.",
"$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})?$"
},
"isRelatedTo": {
"description": "The source of the association is related to the target in some way that is not better described by another association type.",
"$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})?$"
},
"precedes": {
"description": "The source of the association comes before the target of the association in time or order.",
"$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})?$"
},
"replacedBy": {
"description": "The source of the association has been supplanted by, displaced by, or superseded by the target of the association.",
"$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": [
"exactMatchOf",
"isChildOf",
"isParentOf",
"isPartOf",
"isPeerOf",
"isRelatedTo",
"precedes",
"replacedBy"
],
"additionalProperties": false
E.2.1.5
AnyClrCredential
AnyClrCredential represents an ClrCredential that might be built using [
VC-DATA-MODEL
] or [
VC-DATA-MODEL-2.0
]. The scope of this class is only for verification purposes. It is not intended to be used in the creation of new credentials, where the [[[#clrcredential]] class
MUST
be used.
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_anyclrcredential-jsonschema1.json",
"title": "JSON-LD Schema adaptation for the AnyClrCredential 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/clr/v2p0/schema/json/clr_v2p0_anyclrcredential-jsonschema1.json for the formal JSON Schema definition.",
"description": "AnyClrCredential represents an ClrCredential that might be built using [[VC-DATA-MODEL]] or [[VC-DATA-MODEL-2.0]]. The scope of this class is only for verification purposes. It is not intended to be used in the creation of new credentials, where the [[[#clrcredential]] class MUST be used.",
"anyOf": [
"description": "A ClrCredential is a CLR with all the properties needed to conform with a Verifiable Credential as defined in the [[VC-DATA-MODEL]].",
"type": "object",
"properties": {
"@context": {
"oneOf": [
"$ref": "#/$defs/Context"
},
"type": "array",
"minItems": 3,
"items": [
"enum": [
"https://www.w3.org/2018/credentials/v1"
},
"type": "string",
"pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/clr\\/v2p0\\/context(-2\\.\\d\\.\\d)*\\.json$"
},
"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 IRI `VerifiableCredential`, and one of the items MUST be the IRI `ClrCredential`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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 IRI `VerifiableCredential`, and one of the items MUST be the IRI `ClrCredential`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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": [
"ClrCredential"
},
"items": {
"description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI `VerifiableCredential`, and one of the items MUST be the IRI `ClrCredential`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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 CLR. May be displayed by wallet user interfaces.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "Optional description of the CLR. May be displayed by wallet user interfaces.",
"$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 ClrCredential, or any AssertionCredential, Achievement, or Profile referenced in the ClrCredential. 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 ClrCredential, or any AssertionCredential, Achievement, or Profile referenced in the ClrCredential. 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"
},
"partial": {
"description": "True if CLR does not contain all the assertions known by the publisher for the learner at the time the CLR is issued. Useful if you are sending a small set of achievements in real time when they are achieved. If False or omitted, the CLR SHOULD be interpreted as containing all the assertions for the learner known by the publisher at the time of issue.",
"$comment": "Origin: Boolean (PrimitiveType); A boolean, expressed as `true` or `false`",
"type": "boolean"
},
"credentialSubject": {
"$ref": "#/$defs/ClrSubjectv1p1"
},
"awardedDate": {
"description": "Timestamp of when the credential was awarded. `issuanceDate` 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 `issuanceDate`, 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 ClrCredential is a CLR with all the properties needed to conform with a Verifiable Credential as defined in the [[VC-DATA-MODEL-2.0]].",
"type": "object",
"properties": {
"@context": {
"oneOf": [
"$ref": "#/$defs/Context"
},
"type": "array",
"minItems": 3,
"items": [
"enum": [
"https://www.w3.org/ns/credentials/v2"
},
"type": "string",
"pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/clr\\/v2p0\\/context(-2\\.\\d\\.\\d)*\\.json$"
},
"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 IRI `VerifiableCredential`, and one of the items MUST be the IRI `ClrCredential`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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 IRI `VerifiableCredential`, and one of the items MUST be the IRI `ClrCredential`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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": [
"ClrCredential"
},
"items": {
"description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI `VerifiableCredential`, and one of the items MUST be the IRI `ClrCredential`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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 CLR. May be displayed by wallet user interfaces.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "Optional description of the CLR. May be displayed by wallet user interfaces.",
"$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 ClrCredential, or any AssertionCredential, Achievement, or Profile referenced in the ClrCredential. 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 ClrCredential, or any AssertionCredential, Achievement, or Profile referenced in the ClrCredential. 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"
},
"partial": {
"description": "True if CLR does not contain all the assertions known by the publisher for the learner at the time the CLR is issued. Useful if you are sending a small set of achievements in real time when they are achieved. If False or omitted, the CLR SHOULD be interpreted as containing all the assertions for the learner known by the publisher at the time of issue.",
"$comment": "Origin: Boolean (PrimitiveType); A boolean, expressed as `true` or `false`",
"type": "boolean"
},
"credentialSubject": {
"$ref": "#/$defs/ClrSubject"
},
"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": {
"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})?$"
},
"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
},
"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
},
"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
},
"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
},
"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
},
"ClrSubjectv1p1": {
"description": "A collection of information about the learner that is the subject of this CLR credential.",
"type": "object",
"properties": {
"id": {
"description": "An identifier for the recipient of the CLR credential. Either `id` or at least one `identifier` is required.",
"$comment": "Origin: URI (DerivedType); A `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 property MUST contain the IRI `ClrSubject`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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": [
"ClrSubject"
},
"items": {
"description": "The property MUST contain the IRI `ClrSubject`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"oneOf": [
"$ref": "#/$defs/IdentityObject"
},
"type": "array",
"items": {
"$ref": "#/$defs/IdentityObject"
},
"achievement": {
"oneOf": [
"$ref": "#/$defs/Achievementv1p1"
},
"type": "array",
"items": {
"$ref": "#/$defs/Achievementv1p1"
},
"verifiableCredential": {
"oneOf": [
"$ref": "#/$defs/VerifiableCredentialv1p1"
},
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/VerifiableCredentialv1p1"
},
"association": {
"oneOf": [
"$ref": "#/$defs/Association"
},
"type": "array",
"items": {
"$ref": "#/$defs/Association"
},
"required": [
"type",
"verifiableCredential"
],
"additionalProperties": true
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"VerifiableCredentialv1p1": {
"description": "A Verifiable Credential as defined in the [[VC-DATA-MODEL]]. As described in [[[#proofs-signatures]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.",
"type": "object",
"properties": {
"@context": {
"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
},
"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
},
"ClrSubject": {
"description": "A collection of information about the learner that is the subject of this CLR credential.",
"type": "object",
"properties": {
"id": {
"description": "An identifier for the recipient of the CLR credential. Either `id` or at least one `identifier` is required.",
"$comment": "Origin: URI (DerivedType); A `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 property MUST contain the IRI `ClrSubject`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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": [
"ClrSubject"
},
"items": {
"description": "The property MUST contain the IRI `ClrSubject`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"oneOf": [
"$ref": "#/$defs/IdentityObject"
},
"type": "array",
"items": {
"$ref": "#/$defs/IdentityObject"
},
"achievement": {
"oneOf": [
"$ref": "#/$defs/Achievement"
},
"type": "array",
"items": {
"$ref": "#/$defs/Achievement"
},
"verifiableCredential": {
"oneOf": [
"$ref": "#/$defs/VerifiableCredential"
},
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/VerifiableCredential"
},
"association": {
"oneOf": [
"$ref": "#/$defs/Association"
},
"type": "array",
"items": {
"$ref": "#/$defs/Association"
},
"required": [
"type",
"verifiableCredential"
],
"additionalProperties": true
},
"VerifiableCredential": {
"description": "A Verifiable Credential as defined in the [[VC-DATA-MODEL-2.0]]. As described in [[[#proofs-signatures]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.",
"type": "object",
"properties": {
"@context": {
"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
},
"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
},
"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})?$"
},
"Association": {
"description": "An Association describes the semantic relationship between two achievements and the credentials that assert those achievements.",
"type": "object",
"properties": {
"type": {
"description": "The value of the type property MUST be 'Association'.",
"$comment": "Origin: IRI (DerivedType); 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": [
"Association"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Association"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"associationType": {
"description": "The type of relationship between a source achievement and a target achievement. For example the source achievement is the child of the target achievement.",
"$comment": "Origin: AssociationType (Enumeration); A vocabulary of association types. Associations describe the semantic relationship between two achievements.",
"type": "string",
"enum": [
"exactMatchOf",
"isChildOf",
"isParentOf",
"isPartOf",
"isPeerOf",
"isRelatedTo",
"precedes",
"replacedBy"
},
"sourceId": {
"description": "The `id` of the source 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})?$"
},
"targetId": {
"description": "The `id` of the target 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})?$"
},
"required": [
"type",
"associationType",
"sourceId",
"targetId"
],
"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
},
"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
},
"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
},
"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
},
"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.6
ClrCredentialv1p1
A ClrCredential is a CLR with all the properties needed to conform with a Verifiable Credential as defined in the [
VC-DATA-MODEL
].
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_clrcredentialv1p1-jsonschema1.json",
"title": "JSON-LD Schema adaptation for the ClrCredentialv1p1 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/clr/v2p0/schema/json/clr_v2p0_clrcredentialv1p1-jsonschema1.json for the formal JSON Schema definition.",
"description": "A ClrCredential is a CLR with all the properties needed to conform with a Verifiable Credential as defined in the [[VC-DATA-MODEL]].",
"type": "object",
"properties": {
"@context": {
"oneOf": [
"$ref": "#/$defs/Context"
},
"type": "array",
"minItems": 3,
"items": [
"enum": [
"https://www.w3.org/2018/credentials/v1"
},
"type": "string",
"pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/clr\\/v2p0\\/context(-2\\.\\d\\.\\d)*\\.json$"
},
"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 IRI `VerifiableCredential`, and one of the items MUST be the IRI `ClrCredential`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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 IRI `VerifiableCredential`, and one of the items MUST be the IRI `ClrCredential`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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": [
"ClrCredential"
},
"items": {
"description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI `VerifiableCredential`, and one of the items MUST be the IRI `ClrCredential`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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 CLR. May be displayed by wallet user interfaces.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "Optional description of the CLR. May be displayed by wallet user interfaces.",
"$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 ClrCredential, or any AssertionCredential, Achievement, or Profile referenced in the ClrCredential. 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 ClrCredential, or any AssertionCredential, Achievement, or Profile referenced in the ClrCredential. 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"
},
"partial": {
"description": "True if CLR does not contain all the assertions known by the publisher for the learner at the time the CLR is issued. Useful if you are sending a small set of achievements in real time when they are achieved. If False or omitted, the CLR SHOULD be interpreted as containing all the assertions for the learner known by the publisher at the time of issue.",
"$comment": "Origin: Boolean (PrimitiveType); A boolean, expressed as `true` or `false`",
"type": "boolean"
},
"credentialSubject": {
"$ref": "#/$defs/ClrSubjectv1p1"
},
"awardedDate": {
"description": "Timestamp of when the credential was awarded. `issuanceDate` 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 `issuanceDate`, 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": {
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"ClrSubjectv1p1": {
"description": "A collection of information about the learner that is the subject of this CLR credential.",
"type": "object",
"properties": {
"id": {
"description": "An identifier for the recipient of the CLR credential. Either `id` or at least one `identifier` is required.",
"$comment": "Origin: URI (DerivedType); A `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 property MUST contain the IRI `ClrSubject`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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": [
"ClrSubject"
},
"items": {
"description": "The property MUST contain the IRI `ClrSubject`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"oneOf": [
"$ref": "#/$defs/IdentityObject"
},
"type": "array",
"items": {
"$ref": "#/$defs/IdentityObject"
},
"achievement": {
"oneOf": [
"$ref": "#/$defs/Achievementv1p1"
},
"type": "array",
"items": {
"$ref": "#/$defs/Achievementv1p1"
},
"verifiableCredential": {
"oneOf": [
"$ref": "#/$defs/VerifiableCredentialv1p1"
},
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/VerifiableCredentialv1p1"
},
"association": {
"oneOf": [
"$ref": "#/$defs/Association"
},
"type": "array",
"items": {
"$ref": "#/$defs/Association"
},
"required": [
"type",
"verifiableCredential"
],
"additionalProperties": true
},
"VerifiableCredentialv1p1": {
"description": "A Verifiable Credential as defined in the [[VC-DATA-MODEL]]. As described in [[[#proofs-signatures]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.",
"type": "object",
"properties": {
"@context": {
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"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
},
"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
},
"Association": {
"description": "An Association describes the semantic relationship between two achievements and the credentials that assert those achievements.",
"type": "object",
"properties": {
"type": {
"description": "The value of the type property MUST be 'Association'.",
"$comment": "Origin: IRI (DerivedType); 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": [
"Association"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Association"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"associationType": {
"description": "The type of relationship between a source achievement and a target achievement. For example the source achievement is the child of the target achievement.",
"$comment": "Origin: AssociationType (Enumeration); A vocabulary of association types. Associations describe the semantic relationship between two achievements.",
"type": "string",
"enum": [
"exactMatchOf",
"isChildOf",
"isParentOf",
"isPartOf",
"isPeerOf",
"isRelatedTo",
"precedes",
"replacedBy"
},
"sourceId": {
"description": "The `id` of the source 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})?$"
},
"targetId": {
"description": "The `id` of the target 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})?$"
},
"required": [
"type",
"associationType",
"sourceId",
"targetId"
],
"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
},
"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
},
"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
},
"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.7
ClrSubjectv1p1
A collection of information about the learner that is the subject of this CLR credential.
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_clrsubjectv1p1-jsonschema1.json",
"title": "JSON-LD Schema adaptation for the ClrSubjectv1p1 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/clr/v2p0/schema/json/clr_v2p0_clrsubjectv1p1-jsonschema1.json for the formal JSON Schema definition.",
"description": "A collection of information about the learner that is the subject of this CLR credential.",
"type": "object",
"properties": {
"id": {
"description": "An identifier for the recipient of the CLR credential. Either `id` or at least one `identifier` is required.",
"$comment": "Origin: URI (DerivedType); A `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 property MUST contain the IRI `ClrSubject`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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": [
"ClrSubject"
},
"items": {
"description": "The property MUST contain the IRI `ClrSubject`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"oneOf": [
"$ref": "#/$defs/IdentityObject"
},
"type": "array",
"items": {
"$ref": "#/$defs/IdentityObject"
},
"achievement": {
"oneOf": [
"$ref": "#/$defs/Achievementv1p1"
},
"type": "array",
"items": {
"$ref": "#/$defs/Achievementv1p1"
},
"verifiableCredential": {
"oneOf": [
"$ref": "#/$defs/VerifiableCredentialv1p1"
},
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/VerifiableCredentialv1p1"
},
"association": {
"oneOf": [
"$ref": "#/$defs/Association"
},
"type": "array",
"items": {
"$ref": "#/$defs/Association"
},
"required": [
"type",
"verifiableCredential"
],
"additionalProperties": true,
"$defs": {
"VerifiableCredentialv1p1": {
"description": "A Verifiable Credential as defined in the [[VC-DATA-MODEL]]. As described in [[[#proofs-signatures]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.",
"type": "object",
"properties": {
"@context": {
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"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
},
"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
},
"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})?$"
},
"Association": {
"description": "An Association describes the semantic relationship between two achievements and the credentials that assert those achievements.",
"type": "object",
"properties": {
"type": {
"description": "The value of the type property MUST be 'Association'.",
"$comment": "Origin: IRI (DerivedType); 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": [
"Association"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Association"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"associationType": {
"description": "The type of relationship between a source achievement and a target achievement. For example the source achievement is the child of the target achievement.",
"$comment": "Origin: AssociationType (Enumeration); A vocabulary of association types. Associations describe the semantic relationship between two achievements.",
"type": "string",
"enum": [
"exactMatchOf",
"isChildOf",
"isParentOf",
"isPartOf",
"isPeerOf",
"isRelatedTo",
"precedes",
"replacedBy"
},
"sourceId": {
"description": "The `id` of the source 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})?$"
},
"targetId": {
"description": "The `id` of the target 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})?$"
},
"required": [
"type",
"associationType",
"sourceId",
"targetId"
],
"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
},
"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
},
"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
},
"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
E.2.1.8
ClrCredentialJwtPayload
Represents a Comprehensive Learner Record (CLR) expressed to conform with the JSON Web Token Proof Format [
VC-JOSE-COSE
]. Nested credentials are represented as Compact JWS strings.
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_clrcredentialjwtpayload-jsonschema1.json",
"title": "JSON-LD Schema adaptation for the ClrCredentialJwtPayload 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/clr/v2p0/schema/json/clr_v2p0_clrcredentialjwtpayload-jsonschema1.json for the formal JSON Schema definition.",
"description": "Represents a Comprehensive Learner Record (CLR) expressed to conform with the JSON Web Token Proof Format [[VC-JOSE-COSE]]. Nested credentials are represented as Compact JWS strings.",
"type": "object",
"properties": {
"credentialSubject": {
"$ref": "#/$defs/ClrSubjectJwtPayload"
},
"@context": {
"oneOf": [
"$ref": "#/$defs/Context"
},
"type": "array",
"minItems": 3,
"items": [
"enum": [
"https://www.w3.org/ns/credentials/v2"
},
"type": "string",
"pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/clr\\/v2p0\\/context(-2\\.\\d\\.\\d)*\\.json$"
},
"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 IRI `VerifiableCredential`, and one of the items MUST be the IRI `ClrCredential`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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 IRI `VerifiableCredential`, and one of the items MUST be the IRI `ClrCredential`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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": [
"ClrCredential"
},
"items": {
"description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI `VerifiableCredential`, and one of the items MUST be the IRI `ClrCredential`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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"
},
"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"
},
"name": {
"description": "The name of the CLR. May be displayed by wallet user interfaces.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "Optional description of the CLR. May be displayed by wallet user interfaces.",
"$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 ClrCredential, or any AssertionCredential, Achievement, or Profile referenced in the ClrCredential. 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 ClrCredential, or any AssertionCredential, Achievement, or Profile referenced in the ClrCredential. 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"
},
"partial": {
"description": "True if CLR does not contain all the assertions known by the publisher for the learner at the time the CLR is issued. Useful if you are sending a small set of achievements in real time when they are achieved. If False or omitted, the CLR SHOULD be interpreted as containing all the assertions for the learner known by the publisher at the time of issue.",
"$comment": "Origin: Boolean (PrimitiveType); A boolean, expressed as `true` or `false`",
"type": "boolean"
},
"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"
},
"required": [
"credentialSubject",
"@context",
"type",
"issuer",
"validFrom",
"@context",
"type",
"id",
"name"
],
"additionalProperties": true,
"$defs": {
"ClrSubjectJwtPayload": {
"description": "Claims about the subject learner.",
"type": "object",
"properties": {
"verifiableCredential": {
"oneOf": [
"description": "The set of achievements the publisher claims have been awarded to the learner in Compact JWS format. The CLR issuer publisher may not be the same entity as the assertion issuers, but the CLR subject MUST be the same entity as the assertion subjects even if they have different indentifiers.",
"$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",
"minItems": 1,
"items": {
"description": "The set of achievements the publisher claims have been awarded to the learner in Compact JWS format. The CLR issuer publisher may not be the same entity as the assertion issuers, but the CLR subject MUST be the same entity as the assertion subjects even if they have different indentifiers.",
"$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})?$"
},
"id": {
"description": "An identifier for the recipient of the CLR credential. Either `id` or at least one `identifier` is required.",
"$comment": "Origin: URI (DerivedType); A `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 property MUST contain the IRI `ClrSubject`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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": [
"ClrSubject"
},
"items": {
"description": "The property MUST contain the IRI `ClrSubject`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"oneOf": [
"$ref": "#/$defs/IdentityObject"
},
"type": "array",
"items": {
"$ref": "#/$defs/IdentityObject"
},
"achievement": {
"oneOf": [
"$ref": "#/$defs/Achievement"
},
"type": "array",
"items": {
"$ref": "#/$defs/Achievement"
},
"association": {
"oneOf": [
"$ref": "#/$defs/Association"
},
"type": "array",
"items": {
"$ref": "#/$defs/Association"
},
"required": [
"verifiableCredential",
"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})?$"
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"Association": {
"description": "An Association describes the semantic relationship between two achievements and the credentials that assert those achievements.",
"type": "object",
"properties": {
"type": {
"description": "The value of the type property MUST be 'Association'.",
"$comment": "Origin: IRI (DerivedType); 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": [
"Association"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Association"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"associationType": {
"description": "The type of relationship between a source achievement and a target achievement. For example the source achievement is the child of the target achievement.",
"$comment": "Origin: AssociationType (Enumeration); A vocabulary of association types. Associations describe the semantic relationship between two achievements.",
"type": "string",
"enum": [
"exactMatchOf",
"isChildOf",
"isParentOf",
"isPartOf",
"isPeerOf",
"isRelatedTo",
"precedes",
"replacedBy"
},
"sourceId": {
"description": "The `id` of the source 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})?$"
},
"targetId": {
"description": "The `id` of the target 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})?$"
},
"required": [
"type",
"associationType",
"sourceId",
"targetId"
],
"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
},
"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
},
"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
},
"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
},
"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
},
"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.9
ClrSubjectJwtPayload
Claims about the subject learner.
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_clrsubjectjwtpayload-jsonschema1.json",
"title": "JSON-LD Schema adaptation for the ClrSubjectJwtPayload 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/clr/v2p0/schema/json/clr_v2p0_clrsubjectjwtpayload-jsonschema1.json for the formal JSON Schema definition.",
"description": "Claims about the subject learner.",
"type": "object",
"properties": {
"verifiableCredential": {
"oneOf": [
"description": "The set of achievements the publisher claims have been awarded to the learner in Compact JWS format. The CLR issuer publisher may not be the same entity as the assertion issuers, but the CLR subject MUST be the same entity as the assertion subjects even if they have different indentifiers.",
"$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",
"minItems": 1,
"items": {
"description": "The set of achievements the publisher claims have been awarded to the learner in Compact JWS format. The CLR issuer publisher may not be the same entity as the assertion issuers, but the CLR subject MUST be the same entity as the assertion subjects even if they have different indentifiers.",
"$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})?$"
},
"id": {
"description": "An identifier for the recipient of the CLR credential. Either `id` or at least one `identifier` is required.",
"$comment": "Origin: URI (DerivedType); A `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 property MUST contain the IRI `ClrSubject`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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": [
"ClrSubject"
},
"items": {
"description": "The property MUST contain the IRI `ClrSubject`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"oneOf": [
"$ref": "#/$defs/IdentityObject"
},
"type": "array",
"items": {
"$ref": "#/$defs/IdentityObject"
},
"achievement": {
"oneOf": [
"$ref": "#/$defs/Achievement"
},
"type": "array",
"items": {
"$ref": "#/$defs/Achievement"
},
"association": {
"oneOf": [
"$ref": "#/$defs/Association"
},
"type": "array",
"items": {
"$ref": "#/$defs/Association"
},
"required": [
"verifiableCredential",
"type"
],
"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
},
"Association": {
"description": "An Association describes the semantic relationship between two achievements and the credentials that assert those achievements.",
"type": "object",
"properties": {
"type": {
"description": "The value of the type property MUST be 'Association'.",
"$comment": "Origin: IRI (DerivedType); 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": [
"Association"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Association"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"associationType": {
"description": "The type of relationship between a source achievement and a target achievement. For example the source achievement is the child of the target achievement.",
"$comment": "Origin: AssociationType (Enumeration); A vocabulary of association types. Associations describe the semantic relationship between two achievements.",
"type": "string",
"enum": [
"exactMatchOf",
"isChildOf",
"isParentOf",
"isPartOf",
"isPeerOf",
"isRelatedTo",
"precedes",
"replacedBy"
},
"sourceId": {
"description": "The `id` of the source 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})?$"
},
"targetId": {
"description": "The `id` of the target 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})?$"
},
"required": [
"type",
"associationType",
"sourceId",
"targetId"
],
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"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
},
"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
E.2.1.10
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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": {
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"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
},
"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
E.2.1.11
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
7.
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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": {
"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})?$"
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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.12
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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": {
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"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
},
"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
E.2.1.13
Address
An address for the described entity.
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.14
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.15
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.16
EndorsementCredential
A verifiable credential that asserts a claim about an entity. As described in
7.
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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": {
"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})?$"
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
E.2.1.17
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.18
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.19
GeoCoordinates
The geographic coordinates of a location.
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.20
IdentifierEntry
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.21
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.22
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.23
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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": {
"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
},
"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
},
"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})?$"
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"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
},
"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
E.2.1.24
Related
Identifies a related achievement.
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.25
Result
Describes a result that was achieved.
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.26
ResultDescription
Describes a possible achievement result.
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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": {
"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
},
"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.27
RubricCriterionLevel
Describes a rubric criterion level.
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.28
VerifiableCredential
A Verifiable Credential as defined in the [
VC-DATA-MODEL-2.0
]. As described in
7.
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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 [[[#proofs-signatures]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.",
"type": "object",
"properties": {
"@context": {
"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": {
"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})?$"
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
E.2.1.29
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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": {
"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
},
"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
},
"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})?$"
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"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
},
"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
E.2.1.30
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.31
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.32
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.33
Proof
A JSON-LD Linked Data proof.
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.34
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.35
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.36
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.37
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.38
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.39
IdentifierTypeEnum
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.40
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.41
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.42
AnyAchievementCredential
AnyAchievementCredential represents an AchievementCredential that might be built using [
VC-DATA-MODEL
] or [
VC-DATA-MODEL-2.0
]. The scope of this class is only for verification purposes. It is not intended to be used in the creation of new credentials, where the
B.4.2
AchievementCredential
class
MUST
be used.
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_anyachievementcredential-jsonschema1.json for the formal JSON Schema definition.",
"description": "AnyAchievementCredential represents an AchievementCredential that might be built using [[VC-DATA-MODEL]] or [[VC-DATA-MODEL-2.0]]. The scope of this class is only for verification purposes. It is not intended to be used in the creation of new credentials, where the [[[#achievementcredential]]] class MUST be used.",
"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": {
"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})?$"
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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.43
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
7.
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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": {
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"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
},
"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
},
"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
},
"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
},
"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.44
AnyEndorsementCredential
AnyEndorsementCredential represents an EndorsementCredential that might be built using [
VC-DATA-MODEL
] or [
VC-DATA-MODEL-2.0
]. The scope of this class is only for verification purposes. It is not intended to be used in the creation of new credentials, where the [[[#endorsementcredential]] class
MUST
be used.
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_anyendorsementcredential-jsonschema1.json for the formal JSON Schema definition.",
"description": "AnyEndorsementCredential represents an EndorsementCredential that might be built using [[VC-DATA-MODEL]] or [[VC-DATA-MODEL-2.0]]. The scope of this class is only for verification purposes. It is not intended to be used in the creation of new credentials, where the [[[#endorsementcredential]] class MUST be used.",
"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": {
"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})?$"
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"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
},
"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
},
"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
},
"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
},
"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
E.2.1.45
EndorsementCredentialv1p1
A verifiable credential that asserts a claim about an entity. As described in
7.
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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": {
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"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
},
"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
},
"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
},
"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})?$"
E.2.1.46
VerifiableCredentialv1p1
A Verifiable Credential as defined in the [
VC-DATA-MODEL
]. As described in
7.
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_verifiablecredentialv1p1-jsonschema1.json for the formal JSON Schema definition.",
"description": "A Verifiable Credential as defined in the [[VC-DATA-MODEL]]. As described in [[[#proofs-signatures]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.",
"type": "object",
"properties": {
"@context": {
"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": {
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
E.2.1.47
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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": {
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"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})?$"
},
"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
E.2.1.48
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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": {
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"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})?$"
},
"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
E.2.1.49
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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": {
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"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})?$"
},
"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
E.2.1.50
Multikey
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.51
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.52
JWKS
A JWK Set (JWKS) formatted according to [
RFC7517
].
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.53
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.54
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.55
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.56
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.57
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.58
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.59
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 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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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 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.60
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.61
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.62
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.63
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.64
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.65
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.66
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/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.67
AnyIdentifier
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.68
IdentifierType
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_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/clr/v2p0/schema/json/clr_v2p0_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.69
GetClrCredentialsResponse
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://purl.imsglobal.org/spec/clr/v2p0/schema/json/clr_v2p0_getclrcredentialsresponse-jsonschema1.json",
"title": "JSON-LD Schema adaptation for the GetClrCredentialsResponse 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/clr/v2p0/schema/json/clr_v2p0_getclrcredentialsresponse-jsonschema1.json for the formal JSON Schema definition.",
"description": "No description supplied.",
"type": "object",
"properties": {
"credential": {
"oneOf": [
"$ref": "#/$defs/ClrCredential"
},
"type": "array",
"items": {
"$ref": "#/$defs/ClrCredential"
},
"compactJwsString": {
"oneOf": [
"description": "ClrCredentials 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": "ClrCredentials 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": {
"ClrCredential": {
"description": "A ClrCredential is a CLR with all the properties needed to conform with a Verifiable Credential as defined in the [[VC-DATA-MODEL-2.0]].",
"type": "object",
"properties": {
"@context": {
"oneOf": [
"$ref": "#/$defs/Context"
},
"type": "array",
"minItems": 3,
"items": [
"enum": [
"https://www.w3.org/ns/credentials/v2"
},
"type": "string",
"pattern": "^https:\\/\\/purl\\.imsglobal\\.org\\/spec\\/clr\\/v2p0\\/context(-2\\.\\d\\.\\d)*\\.json$"
},
"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 IRI `VerifiableCredential`, and one of the items MUST be the IRI `ClrCredential`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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 IRI `VerifiableCredential`, and one of the items MUST be the IRI `ClrCredential`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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": [
"ClrCredential"
},
"items": {
"description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI `VerifiableCredential`, and one of the items MUST be the IRI `ClrCredential`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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 CLR. May be displayed by wallet user interfaces.",
"$comment": "Origin: String (PrimitiveType); Character strings.",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"description": {
"description": "Optional description of the CLR. May be displayed by wallet user interfaces.",
"$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 ClrCredential, or any AssertionCredential, Achievement, or Profile referenced in the ClrCredential. 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 ClrCredential, or any AssertionCredential, Achievement, or Profile referenced in the ClrCredential. 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"
},
"partial": {
"description": "True if CLR does not contain all the assertions known by the publisher for the learner at the time the CLR is issued. Useful if you are sending a small set of achievements in real time when they are achieved. If False or omitted, the CLR SHOULD be interpreted as containing all the assertions for the learner known by the publisher at the time of issue.",
"$comment": "Origin: Boolean (PrimitiveType); A boolean, expressed as `true` or `false`",
"type": "boolean"
},
"credentialSubject": {
"$ref": "#/$defs/ClrSubject"
},
"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})?$"
},
"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
},
"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
},
"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
},
"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
},
"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
},
"ClrSubject": {
"description": "A collection of information about the learner that is the subject of this CLR credential.",
"type": "object",
"properties": {
"id": {
"description": "An identifier for the recipient of the CLR credential. Either `id` or at least one `identifier` is required.",
"$comment": "Origin: URI (DerivedType); A `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 property MUST contain the IRI `ClrSubject`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII 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": [
"ClrSubject"
},
"items": {
"description": "The property MUST contain the IRI `ClrSubject`.",
"$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).",
"oneOf": [
"type": "string"
},
"type": "object",
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"identifier": {
"oneOf": [
"$ref": "#/$defs/IdentityObject"
},
"type": "array",
"items": {
"$ref": "#/$defs/IdentityObject"
},
"achievement": {
"oneOf": [
"$ref": "#/$defs/Achievement"
},
"type": "array",
"items": {
"$ref": "#/$defs/Achievement"
},
"verifiableCredential": {
"oneOf": [
"$ref": "#/$defs/VerifiableCredential"
},
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/VerifiableCredential"
},
"association": {
"oneOf": [
"$ref": "#/$defs/Association"
},
"type": "array",
"items": {
"$ref": "#/$defs/Association"
},
"required": [
"type",
"verifiableCredential"
],
"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
},
"VerifiableCredential": {
"description": "A Verifiable Credential as defined in the [[VC-DATA-MODEL-2.0]]. As described in [[[#proofs-signatures]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.",
"type": "object",
"properties": {
"@context": {
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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
},
"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})?$"
},
"Association": {
"description": "An Association describes the semantic relationship between two achievements and the credentials that assert those achievements.",
"type": "object",
"properties": {
"type": {
"description": "The value of the type property MUST be 'Association'.",
"$comment": "Origin: IRI (DerivedType); 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": [
"Association"
},
"type": "object",
"additionalProperties": {
"type": "string",
"enum": [
"Association"
},
"propertyNames": {
"pattern": "^[a-z]{2}(-[A-Z]{2})?$"
},
"associationType": {
"description": "The type of relationship between a source achievement and a target achievement. For example the source achievement is the child of the target achievement.",
"$comment": "Origin: AssociationType (Enumeration); A vocabulary of association types. Associations describe the semantic relationship between two achievements.",
"type": "string",
"enum": [
"exactMatchOf",
"isChildOf",
"isParentOf",
"isPartOf",
"isPeerOf",
"isRelatedTo",
"precedes",
"replacedBy"
},
"sourceId": {
"description": "The `id` of the source 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})?$"
},
"targetId": {
"description": "The `id` of the target 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})?$"
},
"required": [
"type",
"associationType",
"sourceId",
"targetId"
],
"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
},
"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
},
"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
},
"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
},
"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
},
"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.3
OpenAPI Schema
E.3.1
OpenAPI (JSON)
CLR Standard data model.
"openapi" : "3.0.1",
"info" : {
"title" : "OpenAPI schema for Comprehensive Learner Record Standard",
"description" : "CLR Standard data model.",
"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" : "2.0",
"x-status" : "Final",
"x-model-pid" : "org.1edtech.clr.v2p0.model",
"x-service-pid" : "org.1edtech.clr.v2p0.rest.servicemodel",
"x-src-operation-count" : 5,
"x-oas-operation-count" : 5
},
"servers" : [ {
"url" : "https://example.org/ims/clr/v2p0",
"description" : "The above Server URL should be changed to the actual server location."
} ],
"tags" : [ {
"name" : "ClrCredentials",
"description" : "These endpoints are used to exchange ClrCredentials and Profile information."
}, {
"name" : "Discovery"
} ],
"paths" : {
"/credentials" : {
"get" : {
"tags" : [ "ClrCredentials" ],
"summary" : "The REST GET operation for the getCredentials() API call.",
"description" : "Get issued ClrCredentials from the [=resource server=] for the supplied parameters and access token.",
"operationId" : "getCredentials",
"parameters" : [ {
"name" : "limit",
"in" : "query",
"description" : "The maximum number of ClrCredentials 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 ClrCredential to return. (zero indexed)",
"required" : false,
"allowEmptyValue" : false,
"style" : "form",
"schema" : {
"minimum" : 0,
"type" : "integer",
"format" : "int32"
}, {
"name" : "since",
"in" : "query",
"description" : "Only include ClrCredentials 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 ClrCredentials that meet the request parameters. Paging applies to the total number of ClrCredentials in the response.",
"headers" : {
"X-Total-Count" : {
"$ref" : "#/components/headers/X-Total-Count"
},
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/GetClrCredentialsResponse"
},
"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/clr/v2p0/scope/credential.readonly" ]
} ],
"x-operation-pid" : "org.1edtech.clr.v2p0.rest.getcredentials.operation"
},
"post" : {
"tags" : [ "ClrCredentials" ],
"summary" : "The REST POST operation for the upsertCredential() API call.",
"description" : "Create or replace a ClrCredential 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/ClrCredential"
},
"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 ClrCredential was successfully replaced on the [=resource server=]. The response body MUST be the ClrCredential in the request.",
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/ClrCredential"
},
"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 ClrCredential was successfully created on the [=resource server=]. The response body MUST be the ClrCredential in the request.",
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/ClrCredential"
},
"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/clr/v2p0/scope/credential.upsert" ]
} ],
"x-operation-pid" : "org.1edtech.clr.v2p0.rest.upsertcredential.operation"
},
"/profile" : {
"get" : {
"tags" : [ "ClrCredentials" ],
"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/clr/v2p0/scope/profile.readonly" ]
} ],
"x-operation-pid" : "org.1edtech.clr.v2p0.rest.getprofile.operation"
},
"put" : {
"tags" : [ "ClrCredentials" ],
"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/clr/v2p0/scope/profile.update" ]
} ],
"x-operation-pid" : "org.1edtech.clr.v2p0.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"
},
"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"
},
"x-operation-pid" : "org.1edtech.clr.v2p0.rest.getservicedescription.operation"
},
"components" : {
"schemas" : {
"CredentialSubject" : {
"type" : "object",
"properties" : {
"id" : {
"type" : "string",
"description" : "The identity of the credential subject.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.uri.class"
},
"additionalProperties" : true,
"description" : "Claims about the credential subject. Maps to Credential Subject as defined in the [[VC-DATA-MODEL-2.0]].",
"x-class-pid" : "org.1edtech.clr.v2p0.credentialsubject.class"
},
"Address" : {
"required" : [ "type" ],
"type" : "object",
"properties" : {
"addressCountry" : {
"type" : "string",
"description" : "A country.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.derived.countrycode.class"
},
"streetAddress" : {
"type" : "string",
"description" : "A street address within the locality.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"postalCode" : {
"type" : "string",
"description" : "A postal code.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"addressLocality" : {
"type" : "string",
"description" : "A locality within the region.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.derived.iri.class"
},
"addressRegion" : {
"type" : "string",
"description" : "A region within the country.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"postOfficeBoxNumber" : {
"type" : "string",
"description" : "A post office box number for PO box addresses.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"additionalProperties" : true,
"description" : "An address for the described entity.",
"x-class-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.iri.class"
},
"additionalProperties" : true,
"description" : "Identify the type and location of a data schema.",
"x-class-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.openapicomponents.class"
},
"Image" : {
"required" : [ "id", "type" ],
"type" : "object",
"properties" : {
"caption" : {
"type" : "string",
"description" : "The caption for the image.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"id" : {
"type" : "string",
"description" : "The URI or Data URI of the image.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.uri.class"
},
"type" : {
"type" : "string",
"description" : "MUST be the IRI 'Image'.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"description" : {
"type" : "string",
"description" : "A short description of the issuer entity or organization.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"dateOfBirth" : {
"type" : "string",
"description" : "Birthdate of the person.",
"format" : "date",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"phone" : {
"type" : "string",
"description" : "A phone number.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"name" : {
"type" : "string",
"description" : "The name of the entity or organization.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"patronymicName" : {
"type" : "string",
"description" : "Patronymic name.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"id" : {
"type" : "string",
"description" : "Unique URI for the Issuer/Profile file.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"email" : {
"type" : "string",
"description" : "An email address.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.profile.class"
},
"VerifiableCredential" : {
"required" : [ "@context", "type", "issuer", "validFrom", "credentialSubject" ],
"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.clr.v2p0.credentialschema.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.clr.v2p0.evidence.class"
},
"credentialSubject" : {
"$ref" : "#/components/schemas/CredentialSubject"
},
"validFrom" : {
"type" : "string",
"description" : "Timestamp of when the credential becomes valid.",
"format" : "date-time",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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'.",
"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.clr.v2p0.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'.",
"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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.termsofuse.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.clr.v2p0.derived.datetimez.class"
},
"id" : {
"type" : "string",
"description" : "Unambiguous reference to the credential.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.proof.class"
},
"additionalProperties" : true,
"description" : "A Verifiable Credential as defined in the [[VC-DATA-MODEL-2.0]]. As described in [[[#proofs-signatures]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.",
"x-class-pid" : "org.1edtech.clr.v2p0.verifiablecredential.class"
},
"IdentifierEntry" : {
"required" : [ "type", "identifier", "identifierType" ],
"type" : "object",
"properties" : {
"identifier" : {
"type" : "string",
"description" : "An identifier.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.identifiertypeenum.class"
},
"type" : {
"type" : "string",
"description" : "MUST be the IRI 'IdentifierEntry'.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.iri.class"
},
"additionalProperties" : false,
"description" : "The IdentifierEntry complex type.",
"x-class-pid" : "org.1edtech.clr.v2p0.identifierentry.class"
},
"Alignment" : {
"required" : [ "type", "targetName", "targetUrl" ],
"type" : "object",
"properties" : {
"targetName" : {
"type" : "string",
"description" : "Name of the alignment.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"targetFramework" : {
"type" : "string",
"description" : "Name of the framework the alignment target.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"targetDescription" : {
"type" : "string",
"description" : "Short description of the alignment target.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.url.class"
},
"additionalProperties" : true,
"description" : "Describes an alignment between an achievement and a node in an educational framework.",
"x-class-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.imsx_codeminorfieldvalue.class"
},
"additionalProperties" : false,
"description" : "This is the container for a single code minor status code.",
"x-class-pid" : "org.1edtech.clr.v2p0.imsx_codeminorfield.class"
},
"Association" : {
"required" : [ "type", "associationType", "sourceId", "targetId" ],
"type" : "object",
"properties" : {
"sourceId" : {
"type" : "string",
"description" : "The `id` of the source achievement.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.uri.class"
},
"targetId" : {
"type" : "string",
"description" : "The `id` of the target achievement.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.uri.class"
},
"associationType" : {
"type" : "string",
"description" : "The type of relationship between a source achievement and a target achievement. For example the source achievement is the child of the target achievement.",
"enum" : [ "exactMatchOf", "isChildOf", "isParentOf", "isPartOf", "isPeerOf", "isRelatedTo", "precedes", "replacedBy" ],
"x-srcprop-pid" : "org.1edtech.clr.v2p0.associationtype.class"
},
"type" : {
"type" : "string",
"description" : "The value of the type property MUST be 'Association'.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.iri.class"
},
"additionalProperties" : false,
"description" : "An Association describes the semantic relationship between two achievements and the credentials that assert those achievements.",
"x-class-pid" : "org.1edtech.clr.v2p0.association.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.clr.v2p0.primitive.string.class"
},
"info" : {
"$ref" : "#/components/schemas/OpenApiInfo"
},
"additionalProperties" : true,
"description" : "The Service Description Document (SDD) is a machine readable document that contains the description of the service features supported by the Provider/Platform. The SDD is an OpenAPI 3.0 (JSON) [[OPENAPIS-3.0]] structured document that MUST be a profiled version of the OpenAPI 3.0 (JSON) file provided provided with this specification. This profiled version contains all of the details about the supported set of service end-points, the supported optional data fields, definitions of the proprietary data fields supplied using the permitted extension mechanisms, definitions of the available proprietary endpoints, and information about the security mechanisms.",
"x-class-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.markdown.class"
},
"name" : {
"type" : "string",
"description" : "A descriptive title of the evidence.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"description" : {
"type" : "string",
"description" : "A longer description of the evidence.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"description" : {
"type" : "string",
"description" : "A short description of the achievement.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.related.class"
},
"name" : {
"type" : "string",
"description" : "The name of the achievement.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"id" : {
"type" : "string",
"description" : "Unique URI for the Achievement.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.identifiertypeenum.class"
},
"hashed" : {
"type" : "boolean",
"description" : "Whether or not the `identityHash` value is hashed.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.boolean.class"
},
"type" : {
"type" : "string",
"description" : "MUST be the IRI 'IdentityObject'.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.iri.class"
},
"additionalProperties" : false,
"description" : "A collection of information about the recipient of an achievement.",
"x-class-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.uri.class"
},
"type" : {
"type" : "string",
"description" : "The name of the credential status method.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.credentialstatus.class"
},
"ClrSubject" : {
"required" : [ "type", "verifiableCredential" ],
"type" : "object",
"properties" : {
"identifier" : {
"minItems" : 0,
"type" : "array",
"description" : "Other identifiers for the recipient of the CLR credential. Either `id` or at least one `identifier`is required.",
"items" : {
"$ref" : "#/components/schemas/IdentityObject"
},
"x-srcprop-pid" : "org.1edtech.clr.v2p0.identityobject.class"
},
"achievement" : {
"minItems" : 0,
"type" : "array",
"description" : "The set of achievements the CLR issuer expects the learner to achieve.",
"items" : {
"$ref" : "#/components/schemas/Achievement"
},
"x-srcprop-pid" : "org.1edtech.clr.v2p0.achievement.class"
},
"association" : {
"minItems" : 0,
"type" : "array",
"description" : "Associations describe the semantic relationship between source and target achievements and their assertions.",
"items" : {
"$ref" : "#/components/schemas/Association"
},
"x-srcprop-pid" : "org.1edtech.clr.v2p0.association.class"
},
"id" : {
"type" : "string",
"description" : "An identifier for the recipient of the CLR credential. Either `id` or at least one `identifier` is required.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.uri.class"
},
"type" : {
"minItems" : 1,
"type" : "array",
"description" : "The property MUST contain the IRI `ClrSubject`.",
"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.clr.v2p0.derived.iri.class"
},
"verifiableCredential" : {
"minItems" : 1,
"type" : "array",
"description" : "A set of AchievementCredentials, OpenBadgeCredentials, and other VerifiableCredentials the learner has been awarded. The credential issuers may not be the same entity as the ClrCredential issuer, but the ClrCredential's credential subject is guaranteed to be the same person as the credential subject of each included credential, even if they use different identifiers.",
"items" : {
"$ref" : "#/components/schemas/VerifiableCredential"
},
"x-srcprop-pid" : "org.1edtech.clr.v2p0.verifiablecredential.class"
},
"additionalProperties" : true,
"description" : "A collection of information about the learner that is the subject of this CLR credential.",
"x-class-pid" : "org.1edtech.clr.v2p0.clrsubject.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.imsx_statusinfo.class"
},
"GetClrCredentialsResponse" : {
"type" : "object",
"properties" : {
"credential" : {
"minItems" : 0,
"type" : "array",
"description" : "ClrCredentials that have not been signed with the VC-JWT Proof Format MUST be in the `credential` array.",
"items" : {
"$ref" : "#/components/schemas/ClrCredential"
},
"x-srcprop-pid" : "org.1edtech.clr.v2p0.clrcredential.class"
},
"compactJwsString" : {
"minItems" : 0,
"type" : "array",
"description" : "ClrCredentials 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.clr.v2p0.derived.compactjws.class"
},
"additionalProperties" : false,
"description" : "The GetClrCredentialsResponse complex type.",
"x-class-pid" : "org.1edtech.clr.v2p0.getclrcredentialsresponse.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.clr.v2p0.derived.uri.class"
},
"type" : {
"type" : "string",
"description" : "The value MUST identify the type of the terms of use.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.url.class"
},
"description" : {
"type" : "string",
"description" : "A short description for the security scheme.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"type" : {
"type" : "string",
"description" : "MUST be the string `oauth2`.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"additionalProperties" : true,
"description" : "Defines an OAuth2 security scheme that can be used by the operations.",
"x-class-pid" : "org.1edtech.clr.v2p0.openapioauth2securityscheme.class"
},
"ClrCredential" : {
"required" : [ "@context", "type", "id", "name", "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.clr.v2p0.credentialschema.class"
},
"endorsement" : {
"minItems" : 0,
"type" : "array",
"description" : "Allows endorsers to make specific claims about the ClrCredential, or any AssertionCredential, Achievement, or Profile referenced in the ClrCredential. These endorsements are signed with a Data Integrity proof format.",
"items" : {
"$ref" : "#/components/schemas/EndorsementCredential"
},
"x-srcprop-pid" : "org.1edtech.clr.v2p0.endorsementcredential.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.clr.v2p0.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.clr.v2p0.evidence.class"
},
"credentialSubject" : {
"$ref" : "#/components/schemas/ClrSubject"
},
"description" : {
"type" : "string",
"description" : "Optional description of the CLR. May be displayed by wallet user interfaces.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"validFrom" : {
"type" : "string",
"description" : "Timestamp of when the credential becomes valid.",
"format" : "date-time",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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 IRI `VerifiableCredential`, and one of the items MUST be the IRI `ClrCredential`.",
"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.clr.v2p0.derived.iri.class"
},
"@context" : {
"minItems" : 1,
"type" : "array",
"description" : "The value of the `@context` property MUST be an ordered set where the first three items are the URLs `https://www.w3.org/ns/credentials/v2`, `https://purl.imsglobal.org/spec/clr/v2p0/context-2.0.1.json`, `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.clr.v2p0.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.clr.v2p0.profileref.class"
},
"credentialStatus" : {
"$ref" : "#/components/schemas/CredentialStatus"
},
"endorsementJwt" : {
"minItems" : 0,
"type" : "array",
"description" : "Allows endorsers to make specific claims about the ClrCredential, or any AssertionCredential, Achievement, or Profile referenced in the ClrCredential. 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.clr.v2p0.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.clr.v2p0.termsofuse.class"
},
"name" : {
"type" : "string",
"description" : "The name of the CLR. May be displayed by wallet user interfaces.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.derived.datetimez.class"
},
"id" : {
"type" : "string",
"description" : "Unambiguous reference to the credential.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.proof.class"
},
"partial" : {
"type" : "boolean",
"description" : "True if CLR does not contain all the assertions known by the publisher for the learner at the time the CLR is issued. Useful if you are sending a small set of achievements in real time when they are achieved. If False or omitted, the CLR SHOULD be interpreted as containing all the assertions for the learner known by the publisher at the time of issue.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.boolean.class"
},
"additionalProperties" : true,
"description" : "A ClrCredential is a CLR with all the properties needed to conform with a Verifiable Credential as defined in the [[VC-DATA-MODEL-2.0]].",
"x-class-pid" : "org.1edtech.clr.v2p0.clrcredential.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.clr.v2p0.primitive.string.class"
},
"name" : {
"type" : "string",
"description" : "The name of the rubric criterion level.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"description" : {
"type" : "string",
"description" : "Description of the rubric criterion level.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.alignment.class"
},
"points" : {
"type" : "string",
"description" : "The points associated with this rubric criterion level.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"additionalProperties" : true,
"description" : "Describes a rubric criterion level.",
"x-class-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.url.class"
},
"termsOfService" : {
"type" : "string",
"description" : "A fully qualified URL to the [=resource server=]'s terms of service.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.url.class"
},
"title" : {
"type" : "string",
"description" : "The name of the [=resource server=].",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"version" : {
"type" : "string",
"description" : "The version of the API.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.iri.class"
},
"additionalProperties" : true,
"description" : "A collection of information about the subject of the endorsement.",
"x-class-pid" : "org.1edtech.clr.v2p0.endorsementsubject.class"
},
"GeoCoordinates" : {
"required" : [ "type", "latitude", "longitude" ],
"type" : "object",
"properties" : {
"latitude" : {
"type" : "number",
"description" : "The latitude of the location [[WGS84]].",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.float.class"
},
"type" : {
"type" : "string",
"description" : "MUST be the IRI 'GeoCoordinates'.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.iri.class"
},
"longitude" : {
"type" : "number",
"description" : "The longitude of the location [[WGS84]].",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.float.class"
},
"additionalProperties" : true,
"description" : "The geographic coordinates of a location.",
"x-class-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.derived.uri.class"
},
"type" : {
"type" : "string",
"description" : "The name of the refresh service method.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.iri.class"
},
"additionalProperties" : true,
"description" : "The information in RefreshService is used to refresh the verifiable credential.",
"x-class-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.derived.languagecode.class"
},
"id" : {
"type" : "string",
"description" : "The related achievement.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.derived.iri.class"
},
"version" : {
"type" : "string",
"description" : "The version of the related achievement.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"additionalProperties" : true,
"description" : "Identifies a related achievement.",
"x-class-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"valueMin" : {
"type" : "string",
"description" : "The minimum possible `value` that may be asserted in a linked result.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.uri.class"
},
"name" : {
"type" : "string",
"description" : "The name of the result.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"additionalProperties" : true,
"description" : "Describes a possible achievement result.",
"x-class-pid" : "org.1edtech.clr.v2p0.resultdescription.class"
},
"Proof" : {
"required" : [ "type" ],
"type" : "object",
"properties" : {
"proofValue" : {
"type" : "string",
"description" : "Value of the proof.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"created" : {
"type" : "string",
"description" : "Date the proof was created.",
"format" : "date-time",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"challenge" : {
"type" : "string",
"description" : "A value chosen by the verifier to mitigate authentication proof replay attacks.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"type" : {
"type" : "string",
"description" : "Signature suite used to produce proof.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.iri.class"
},
"verificationMethod" : {
"type" : "string",
"description" : "The URL of the public key that can verify the signature.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"cryptosuite" : {
"type" : "string",
"description" : "The suite used to create the proof.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"additionalProperties" : true,
"description" : "A JSON-LD Linked Data proof.",
"x-class-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"validFrom" : {
"type" : "string",
"description" : "Timestamp of when the credential becomes valid.",
"format" : "date-time",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.datetimez.class"
},
"id" : {
"type" : "string",
"description" : "Unambiguous reference to the credential.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.endorsementcredential.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/clr/v2p0/scope/credential.readonly" : "Permission to read ClrCredentials for the authenticated entity.",
"https://purl.imsglobal.org/spec/clr/v2p0/scope/credential.upsert" : "Permission to create or update ClrCredentials for the authenticated entity.",
"https://purl.imsglobal.org/spec/clr/v2p0/scope/profile.readonly" : "Permission to read the profile for the authenticated entity.",
"https://purl.imsglobal.org/spec/clr/v2p0/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)
CLR Standard data model.
openapi: 3.0.1
info:
title: OpenAPI schema for Comprehensive Learner Record Standard
description: CLR Standard data model.
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: "2.0"
x-status: Final
x-model-pid: org.1edtech.clr.v2p0.model
x-service-pid: org.1edtech.clr.v2p0.rest.servicemodel
x-src-operation-count: 5
x-oas-operation-count: 5
servers:
- url: https://example.org/ims/clr/v2p0
description: The above Server URL should be changed to the actual server location.
tags:
- name: ClrCredentials
description: These endpoints are used to exchange ClrCredentials and Profile information.
- name: Discovery
paths:
/credentials:
get:
tags:
- ClrCredentials
summary: The REST GET operation for the getCredentials() API call.
description: "Get issued ClrCredentials from the [=resource server=] for the\
\ supplied parameters and access token."
operationId: getCredentials
parameters:
- name: limit
in: query
description: The maximum number of ClrCredentials 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 ClrCredential to return. (zero indexed)
required: false
allowEmptyValue: false
style: form
schema:
minimum: 0
type: integer
format: int32
- name: since
in: query
description: Only include ClrCredentials 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 ClrCredentials that meet the request parameters.
Paging applies to the total number of ClrCredentials in the response.
headers:
X-Total-Count:
$ref: "#/components/headers/X-Total-Count"
content:
application/json:
schema:
$ref: "#/components/schemas/GetClrCredentialsResponse"
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/clr/v2p0/scope/credential.readonly
x-operation-pid: org.1edtech.clr.v2p0.rest.getcredentials.operation
post:
tags:
- ClrCredentials
summary: The REST POST operation for the upsertCredential() API call.
description: "Create or replace a ClrCredential 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/ClrCredential"
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 ClrCredential was successfully replaced on the [=resource\
\ server=]. The response body MUST be the ClrCredential in the request."
content:
application/json:
schema:
$ref: "#/components/schemas/ClrCredential"
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 ClrCredential was successfully created on the [=resource\
\ server=]. The response body MUST be the ClrCredential in the request."
content:
application/json:
schema:
$ref: "#/components/schemas/ClrCredential"
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/clr/v2p0/scope/credential.upsert
x-operation-pid: org.1edtech.clr.v2p0.rest.upsertcredential.operation
/profile:
get:
tags:
- ClrCredentials
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/clr/v2p0/scope/profile.readonly
x-operation-pid: org.1edtech.clr.v2p0.rest.getprofile.operation
put:
tags:
- ClrCredentials
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/clr/v2p0/scope/profile.update
x-operation-pid: org.1edtech.clr.v2p0.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"
"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"
x-operation-pid: org.1edtech.clr.v2p0.rest.getservicedescription.operation
components:
schemas:
CredentialSubject:
type: object
properties:
id:
type: string
description: The identity of the credential subject.
x-srcprop-pid: org.1edtech.clr.v2p0.derived.uri.class
additionalProperties: true
description: "Claims about the credential subject. Maps to Credential Subject\
\ as defined in the [[VC-DATA-MODEL-2.0]]."
x-class-pid: org.1edtech.clr.v2p0.credentialsubject.class
required:
- type
type: object
properties:
addressCountry:
type: string
description: A country.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.derived.countrycode.class
streetAddress:
type: string
description: A street address within the locality.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
postalCode:
type: string
description: A postal code.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
addressLocality:
type: string
description: A locality within the region.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.derived.iri.class
addressRegion:
type: string
description: A region within the country.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
postOfficeBoxNumber:
type: string
description: A post office box number for PO box addresses.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
additionalProperties: true
description: An address for the described entity.
x-class-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.iri.class
additionalProperties: true
description: Identify the type and location of a data schema.
x-class-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.openapicomponents.class
Image:
required:
- id
- type
type: object
properties:
caption:
type: string
description: The caption for the image.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
id:
type: string
description: The URI or Data URI of the image.
x-srcprop-pid: org.1edtech.clr.v2p0.derived.uri.class
type:
type: string
description: MUST be the IRI 'Image'.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class
description:
type: string
description: A short description of the issuer entity or organization.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class
dateOfBirth:
type: string
description: Birthdate of the person.
format: date
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class
phone:
type: string
description: A phone number.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class
name:
type: string
description: The name of the entity or organization.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
patronymicName:
type: string
description: Patronymic name.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
id:
type: string
description: Unique URI for the Issuer/Profile file.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class
email:
type: string
description: An email address.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.profile.class
VerifiableCredential:
required:
- '@context'
- type
- issuer
- validFrom
- credentialSubject
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.clr.v2p0.credentialschema.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.clr.v2p0.evidence.class
credentialSubject:
$ref: "#/components/schemas/CredentialSubject"
validFrom:
type: string
description: Timestamp of when the credential becomes valid.
format: date-time
x-srcprop-pid: org.1edtech.clr.v2p0.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'.
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.clr.v2p0.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'.
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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.termsofuse.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.clr.v2p0.derived.datetimez.class
id:
type: string
description: Unambiguous reference to the credential.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.proof.class
additionalProperties: true
description: "A Verifiable Credential as defined in the [[VC-DATA-MODEL-2.0]].\
\ As described in [[[#proofs-signatures]]], at least one proof mechanism,\
\ and the details necessary to evaluate that proof, MUST be expressed for\
\ a credential to be a verifiable credential. In the case of an embedded proof,\
\ the credential MUST append the proof in the `proof` property."
x-class-pid: org.1edtech.clr.v2p0.verifiablecredential.class
IdentifierEntry:
required:
- type
- identifier
- identifierType
type: object
properties:
identifier:
type: string
description: An identifier.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.identifiertypeenum.class
type:
type: string
description: MUST be the IRI 'IdentifierEntry'.
x-srcprop-pid: org.1edtech.clr.v2p0.derived.iri.class
additionalProperties: false
description: The IdentifierEntry complex type.
x-class-pid: org.1edtech.clr.v2p0.identifierentry.class
Alignment:
required:
- type
- targetName
- targetUrl
type: object
properties:
targetName:
type: string
description: Name of the alignment.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
targetFramework:
type: string
description: Name of the framework the alignment target.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
targetDescription:
type: string
description: Short description of the alignment target.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.url.class
additionalProperties: true
description: Describes an alignment between an achievement and a node in an
educational framework.
x-class-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.imsx_codeminorfieldvalue.class
additionalProperties: false
description: This is the container for a single code minor status code.
x-class-pid: org.1edtech.clr.v2p0.imsx_codeminorfield.class
Association:
required:
- type
- associationType
- sourceId
- targetId
type: object
properties:
sourceId:
type: string
description: The `id` of the source achievement.
x-srcprop-pid: org.1edtech.clr.v2p0.derived.uri.class
targetId:
type: string
description: The `id` of the target achievement.
x-srcprop-pid: org.1edtech.clr.v2p0.derived.uri.class
associationType:
type: string
description: The type of relationship between a source achievement and a
target achievement. For example the source achievement is the child of
the target achievement.
enum:
- exactMatchOf
- isChildOf
- isParentOf
- isPartOf
- isPeerOf
- isRelatedTo
- precedes
- replacedBy
x-srcprop-pid: org.1edtech.clr.v2p0.associationtype.class
type:
type: string
description: The value of the type property MUST be 'Association'.
x-srcprop-pid: org.1edtech.clr.v2p0.derived.iri.class
additionalProperties: false
description: An Association describes the semantic relationship between two
achievements and the credentials that assert those achievements.
x-class-pid: org.1edtech.clr.v2p0.association.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.clr.v2p0.primitive.string.class
info:
$ref: "#/components/schemas/OpenApiInfo"
additionalProperties: true
description: "The Service Description Document (SDD) is a machine readable document\
\ that contains the description of the service features supported by the Provider/Platform.\
\ The SDD is an OpenAPI 3.0 (JSON) [[OPENAPIS-3.0]] structured document that\
\ MUST be a profiled version of the OpenAPI 3.0 (JSON) file provided provided\
\ with this specification. This profiled version contains all of the details\
\ about the supported set of service end-points, the supported optional data\
\ fields, definitions of the proprietary data fields supplied using the permitted\
\ extension mechanisms, definitions of the available proprietary endpoints,\
\ and information about the security mechanisms."
x-class-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.markdown.class
name:
type: string
description: A descriptive title of the evidence.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class
description:
type: string
description: A longer description of the evidence.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class
description:
type: string
description: A short description of the achievement.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.related.class
name:
type: string
description: The name of the achievement.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class
id:
type: string
description: Unique URI for the Achievement.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.identifiertypeenum.class
hashed:
type: boolean
description: Whether or not the `identityHash` value is hashed.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.boolean.class
type:
type: string
description: MUST be the IRI 'IdentityObject'.
x-srcprop-pid: org.1edtech.clr.v2p0.derived.iri.class
additionalProperties: false
description: A collection of information about the recipient of an achievement.
x-class-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.uri.class
type:
type: string
description: The name of the credential status method.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.credentialstatus.class
ClrSubject:
required:
- type
- verifiableCredential
type: object
properties:
identifier:
minItems: 0
type: array
description: Other identifiers for the recipient of the CLR credential.
Either `id` or at least one `identifier`is required.
items:
$ref: "#/components/schemas/IdentityObject"
x-srcprop-pid: org.1edtech.clr.v2p0.identityobject.class
achievement:
minItems: 0
type: array
description: The set of achievements the CLR issuer expects the learner
to achieve.
items:
$ref: "#/components/schemas/Achievement"
x-srcprop-pid: org.1edtech.clr.v2p0.achievement.class
association:
minItems: 0
type: array
description: Associations describe the semantic relationship between source
and target achievements and their assertions.
items:
$ref: "#/components/schemas/Association"
x-srcprop-pid: org.1edtech.clr.v2p0.association.class
id:
type: string
description: An identifier for the recipient of the CLR credential. Either
`id` or at least one `identifier` is required.
x-srcprop-pid: org.1edtech.clr.v2p0.derived.uri.class
type:
minItems: 1
type: array
description: The property MUST contain the IRI `ClrSubject`.
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.clr.v2p0.derived.iri.class
verifiableCredential:
minItems: 1
type: array
description: "A set of AchievementCredentials, OpenBadgeCredentials, and\
\ other VerifiableCredentials the learner has been awarded. The credential\
\ issuers may not be the same entity as the ClrCredential issuer, but\
\ the ClrCredential's credential subject is guaranteed to be the same\
\ person as the credential subject of each included credential, even if\
\ they use different identifiers."
items:
$ref: "#/components/schemas/VerifiableCredential"
x-srcprop-pid: org.1edtech.clr.v2p0.verifiablecredential.class
additionalProperties: true
description: A collection of information about the learner that is the subject
of this CLR credential.
x-class-pid: org.1edtech.clr.v2p0.clrsubject.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.imsx_statusinfo.class
GetClrCredentialsResponse:
type: object
properties:
credential:
minItems: 0
type: array
description: ClrCredentials that have not been signed with the VC-JWT Proof
Format MUST be in the `credential` array.
items:
$ref: "#/components/schemas/ClrCredential"
x-srcprop-pid: org.1edtech.clr.v2p0.clrcredential.class
compactJwsString:
minItems: 0
type: array
description: ClrCredentials 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.clr.v2p0.derived.compactjws.class
additionalProperties: false
description: The GetClrCredentialsResponse complex type.
x-class-pid: org.1edtech.clr.v2p0.getclrcredentialsresponse.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.clr.v2p0.derived.uri.class
type:
type: string
description: The value MUST identify the type of the terms of use.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.url.class
description:
type: string
description: A short description for the security scheme.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
type:
type: string
description: MUST be the string `oauth2`.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
additionalProperties: true
description: Defines an OAuth2 security scheme that can be used by the operations.
x-class-pid: org.1edtech.clr.v2p0.openapioauth2securityscheme.class
ClrCredential:
required:
- '@context'
- type
- id
- name
- 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.clr.v2p0.credentialschema.class
endorsement:
minItems: 0
type: array
description: "Allows endorsers to make specific claims about the ClrCredential,\
\ or any AssertionCredential, Achievement, or Profile referenced in the\
\ ClrCredential. These endorsements are signed with a Data Integrity proof\
\ format."
items:
$ref: "#/components/schemas/EndorsementCredential"
x-srcprop-pid: org.1edtech.clr.v2p0.endorsementcredential.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.clr.v2p0.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.clr.v2p0.evidence.class
credentialSubject:
$ref: "#/components/schemas/ClrSubject"
description:
type: string
description: Optional description of the CLR. May be displayed by wallet
user interfaces.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
validFrom:
type: string
description: Timestamp of when the credential becomes valid.
format: date-time
x-srcprop-pid: org.1edtech.clr.v2p0.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 IRI `VerifiableCredential`, and one of the\
\ items MUST be the IRI `ClrCredential`."
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.clr.v2p0.derived.iri.class
'@context':
minItems: 1
type: array
description: "The value of the `@context` property MUST be an ordered set\
\ where the first three items are the URLs `https://www.w3.org/ns/credentials/v2`,\
\ `https://purl.imsglobal.org/spec/clr/v2p0/context-2.0.1.json`, `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.clr.v2p0.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.clr.v2p0.profileref.class
credentialStatus:
$ref: "#/components/schemas/CredentialStatus"
endorsementJwt:
minItems: 0
type: array
description: "Allows endorsers to make specific claims about the ClrCredential,\
\ or any AssertionCredential, Achievement, or Profile referenced in the\
\ ClrCredential. 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.clr.v2p0.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.clr.v2p0.termsofuse.class
name:
type: string
description: The name of the CLR. May be displayed by wallet user interfaces.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.derived.datetimez.class
id:
type: string
description: Unambiguous reference to the credential.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.proof.class
partial:
type: boolean
description: "True if CLR does not contain all the assertions known by the\
\ publisher for the learner at the time the CLR is issued. Useful if you\
\ are sending a small set of achievements in real time when they are achieved.\
\ If False or omitted, the CLR SHOULD be interpreted as containing all\
\ the assertions for the learner known by the publisher at the time of\
\ issue."
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.boolean.class
additionalProperties: true
description: "A ClrCredential is a CLR with all the properties needed to conform\
\ with a Verifiable Credential as defined in the [[VC-DATA-MODEL-2.0]]."
x-class-pid: org.1edtech.clr.v2p0.clrcredential.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.clr.v2p0.primitive.string.class
name:
type: string
description: The name of the rubric criterion level.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
description:
type: string
description: Description of the rubric criterion level.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.alignment.class
points:
type: string
description: The points associated with this rubric criterion level.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
additionalProperties: true
description: Describes a rubric criterion level.
x-class-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.url.class
termsOfService:
type: string
description: "A fully qualified URL to the [=resource server=]'s terms of\
\ service."
x-srcprop-pid: org.1edtech.clr.v2p0.derived.url.class
title:
type: string
description: "The name of the [=resource server=]."
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
version:
type: string
description: The version of the API.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.iri.class
additionalProperties: true
description: A collection of information about the subject of the endorsement.
x-class-pid: org.1edtech.clr.v2p0.endorsementsubject.class
GeoCoordinates:
required:
- type
- latitude
- longitude
type: object
properties:
latitude:
type: number
description: "The latitude of the location [[WGS84]]."
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.float.class
type:
type: string
description: MUST be the IRI 'GeoCoordinates'.
x-srcprop-pid: org.1edtech.clr.v2p0.derived.iri.class
longitude:
type: number
description: "The longitude of the location [[WGS84]]."
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.float.class
additionalProperties: true
description: The geographic coordinates of a location.
x-class-pid: org.1edtech.clr.v2p0.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.clr.v2p0.derived.uri.class
type:
type: string
description: The name of the refresh service method.
x-srcprop-pid: org.1edtech.clr.v2p0.derived.iri.class
additionalProperties: true
description: The information in RefreshService is used to refresh the verifiable
credential.
x-class-pid: org.1edtech.clr.v2p0.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.clr.v2p0.derived.languagecode.class
id:
type: string
description: The related achievement.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.derived.iri.class
version:
type: string
description: The version of the related achievement.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
additionalProperties: true
description: Identifies a related achievement.
x-class-pid: org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class
valueMin:
type: string
description: The minimum possible `value` that may be asserted in a linked
result.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.uri.class
name:
type: string
description: The name of the result.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class
additionalProperties: true
description: Describes a possible achievement result.
x-class-pid: org.1edtech.clr.v2p0.resultdescription.class
Proof:
required:
- type
type: object
properties:
proofValue:
type: string
description: Value of the proof.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
created:
type: string
description: Date the proof was created.
format: date-time
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class
challenge:
type: string
description: A value chosen by the verifier to mitigate authentication proof
replay attacks.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class
type:
type: string
description: Signature suite used to produce proof.
x-srcprop-pid: org.1edtech.clr.v2p0.derived.iri.class
verificationMethod:
type: string
description: The URL of the public key that can verify the signature.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class
cryptosuite:
type: string
description: The suite used to create the proof.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
additionalProperties: true
description: A JSON-LD Linked Data proof.
x-class-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class
validFrom:
type: string
description: Timestamp of when the credential becomes valid.
format: date-time
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.datetimez.class
id:
type: string
description: Unambiguous reference to the credential.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.endorsementcredential.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 ClrCredentials for the authenticated entity.
to create or update ClrCredentials 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.
OpenAPI Schema
F.1
JSON
CLR Standard data model.
"openapi" : "3.0.1",
"info" : {
"title" : "OpenAPI schema for Comprehensive Learner Record Standard",
"description" : "CLR Standard data model.",
"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" : "2.0",
"x-status" : "Final",
"x-model-pid" : "org.1edtech.clr.v2p0.model",
"x-service-pid" : "org.1edtech.clr.v2p0.rest.servicemodel",
"x-src-operation-count" : 5,
"x-oas-operation-count" : 5
},
"servers" : [ {
"url" : "https://example.org/ims/clr/v2p0",
"description" : "The above Server URL should be changed to the actual server location."
} ],
"tags" : [ {
"name" : "ClrCredentials",
"description" : "These endpoints are used to exchange ClrCredentials and Profile information."
}, {
"name" : "Discovery"
} ],
"paths" : {
"/credentials" : {
"get" : {
"tags" : [ "ClrCredentials" ],
"summary" : "The REST GET operation for the getCredentials() API call.",
"description" : "Get issued ClrCredentials from the [=resource server=] for the supplied parameters and access token.",
"operationId" : "getCredentials",
"parameters" : [ {
"name" : "limit",
"in" : "query",
"description" : "The maximum number of ClrCredentials 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 ClrCredential to return. (zero indexed)",
"required" : false,
"allowEmptyValue" : false,
"style" : "form",
"schema" : {
"minimum" : 0,
"type" : "integer",
"format" : "int32"
}, {
"name" : "since",
"in" : "query",
"description" : "Only include ClrCredentials 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 ClrCredentials that meet the request parameters. Paging applies to the total number of ClrCredentials in the response.",
"headers" : {
"X-Total-Count" : {
"$ref" : "#/components/headers/X-Total-Count"
},
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/GetClrCredentialsResponse"
},
"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/clr/v2p0/scope/credential.readonly" ]
} ],
"x-operation-pid" : "org.1edtech.clr.v2p0.rest.getcredentials.operation"
},
"post" : {
"tags" : [ "ClrCredentials" ],
"summary" : "The REST POST operation for the upsertCredential() API call.",
"description" : "Create or replace a ClrCredential 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/ClrCredential"
},
"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 ClrCredential was successfully replaced on the [=resource server=]. The response body MUST be the ClrCredential in the request.",
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/ClrCredential"
},
"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 ClrCredential was successfully created on the [=resource server=]. The response body MUST be the ClrCredential in the request.",
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/ClrCredential"
},
"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/clr/v2p0/scope/credential.upsert" ]
} ],
"x-operation-pid" : "org.1edtech.clr.v2p0.rest.upsertcredential.operation"
},
"/profile" : {
"get" : {
"tags" : [ "ClrCredentials" ],
"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/clr/v2p0/scope/profile.readonly" ]
} ],
"x-operation-pid" : "org.1edtech.clr.v2p0.rest.getprofile.operation"
},
"put" : {
"tags" : [ "ClrCredentials" ],
"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/clr/v2p0/scope/profile.update" ]
} ],
"x-operation-pid" : "org.1edtech.clr.v2p0.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"
},
"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"
},
"x-operation-pid" : "org.1edtech.clr.v2p0.rest.getservicedescription.operation"
},
"components" : {
"schemas" : {
"CredentialSubject" : {
"type" : "object",
"properties" : {
"id" : {
"type" : "string",
"description" : "The identity of the credential subject.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.uri.class"
},
"additionalProperties" : true,
"description" : "Claims about the credential subject. Maps to Credential Subject as defined in the [[VC-DATA-MODEL-2.0]].",
"x-class-pid" : "org.1edtech.clr.v2p0.credentialsubject.class"
},
"Address" : {
"required" : [ "type" ],
"type" : "object",
"properties" : {
"addressCountry" : {
"type" : "string",
"description" : "A country.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.derived.countrycode.class"
},
"streetAddress" : {
"type" : "string",
"description" : "A street address within the locality.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"postalCode" : {
"type" : "string",
"description" : "A postal code.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"addressLocality" : {
"type" : "string",
"description" : "A locality within the region.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.derived.iri.class"
},
"addressRegion" : {
"type" : "string",
"description" : "A region within the country.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"postOfficeBoxNumber" : {
"type" : "string",
"description" : "A post office box number for PO box addresses.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"additionalProperties" : true,
"description" : "An address for the described entity.",
"x-class-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.iri.class"
},
"additionalProperties" : true,
"description" : "Identify the type and location of a data schema.",
"x-class-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.openapicomponents.class"
},
"Image" : {
"required" : [ "id", "type" ],
"type" : "object",
"properties" : {
"caption" : {
"type" : "string",
"description" : "The caption for the image.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"id" : {
"type" : "string",
"description" : "The URI or Data URI of the image.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.uri.class"
},
"type" : {
"type" : "string",
"description" : "MUST be the IRI 'Image'.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"description" : {
"type" : "string",
"description" : "A short description of the issuer entity or organization.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"dateOfBirth" : {
"type" : "string",
"description" : "Birthdate of the person.",
"format" : "date",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"phone" : {
"type" : "string",
"description" : "A phone number.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"name" : {
"type" : "string",
"description" : "The name of the entity or organization.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"patronymicName" : {
"type" : "string",
"description" : "Patronymic name.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"id" : {
"type" : "string",
"description" : "Unique URI for the Issuer/Profile file.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"email" : {
"type" : "string",
"description" : "An email address.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.profile.class"
},
"VerifiableCredential" : {
"required" : [ "@context", "type", "issuer", "validFrom", "credentialSubject" ],
"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.clr.v2p0.credentialschema.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.clr.v2p0.evidence.class"
},
"credentialSubject" : {
"$ref" : "#/components/schemas/CredentialSubject"
},
"validFrom" : {
"type" : "string",
"description" : "Timestamp of when the credential becomes valid.",
"format" : "date-time",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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'.",
"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.clr.v2p0.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'.",
"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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.termsofuse.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.clr.v2p0.derived.datetimez.class"
},
"id" : {
"type" : "string",
"description" : "Unambiguous reference to the credential.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.proof.class"
},
"additionalProperties" : true,
"description" : "A Verifiable Credential as defined in the [[VC-DATA-MODEL-2.0]]. As described in [[[#proofs-signatures]]], at least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a credential to be a verifiable credential. In the case of an embedded proof, the credential MUST append the proof in the `proof` property.",
"x-class-pid" : "org.1edtech.clr.v2p0.verifiablecredential.class"
},
"IdentifierEntry" : {
"required" : [ "type", "identifier", "identifierType" ],
"type" : "object",
"properties" : {
"identifier" : {
"type" : "string",
"description" : "An identifier.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.identifiertypeenum.class"
},
"type" : {
"type" : "string",
"description" : "MUST be the IRI 'IdentifierEntry'.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.iri.class"
},
"additionalProperties" : false,
"description" : "The IdentifierEntry complex type.",
"x-class-pid" : "org.1edtech.clr.v2p0.identifierentry.class"
},
"Alignment" : {
"required" : [ "type", "targetName", "targetUrl" ],
"type" : "object",
"properties" : {
"targetName" : {
"type" : "string",
"description" : "Name of the alignment.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"targetFramework" : {
"type" : "string",
"description" : "Name of the framework the alignment target.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"targetDescription" : {
"type" : "string",
"description" : "Short description of the alignment target.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.url.class"
},
"additionalProperties" : true,
"description" : "Describes an alignment between an achievement and a node in an educational framework.",
"x-class-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.imsx_codeminorfieldvalue.class"
},
"additionalProperties" : false,
"description" : "This is the container for a single code minor status code.",
"x-class-pid" : "org.1edtech.clr.v2p0.imsx_codeminorfield.class"
},
"Association" : {
"required" : [ "type", "associationType", "sourceId", "targetId" ],
"type" : "object",
"properties" : {
"sourceId" : {
"type" : "string",
"description" : "The `id` of the source achievement.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.uri.class"
},
"targetId" : {
"type" : "string",
"description" : "The `id` of the target achievement.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.uri.class"
},
"associationType" : {
"type" : "string",
"description" : "The type of relationship between a source achievement and a target achievement. For example the source achievement is the child of the target achievement.",
"enum" : [ "exactMatchOf", "isChildOf", "isParentOf", "isPartOf", "isPeerOf", "isRelatedTo", "precedes", "replacedBy" ],
"x-srcprop-pid" : "org.1edtech.clr.v2p0.associationtype.class"
},
"type" : {
"type" : "string",
"description" : "The value of the type property MUST be 'Association'.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.iri.class"
},
"additionalProperties" : false,
"description" : "An Association describes the semantic relationship between two achievements and the credentials that assert those achievements.",
"x-class-pid" : "org.1edtech.clr.v2p0.association.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.clr.v2p0.primitive.string.class"
},
"info" : {
"$ref" : "#/components/schemas/OpenApiInfo"
},
"additionalProperties" : true,
"description" : "The Service Description Document (SDD) is a machine readable document that contains the description of the service features supported by the Provider/Platform. The SDD is an OpenAPI 3.0 (JSON) [[OPENAPIS-3.0]] structured document that MUST be a profiled version of the OpenAPI 3.0 (JSON) file provided provided with this specification. This profiled version contains all of the details about the supported set of service end-points, the supported optional data fields, definitions of the proprietary data fields supplied using the permitted extension mechanisms, definitions of the available proprietary endpoints, and information about the security mechanisms.",
"x-class-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.markdown.class"
},
"name" : {
"type" : "string",
"description" : "A descriptive title of the evidence.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"description" : {
"type" : "string",
"description" : "A longer description of the evidence.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"description" : {
"type" : "string",
"description" : "A short description of the achievement.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.related.class"
},
"name" : {
"type" : "string",
"description" : "The name of the achievement.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"id" : {
"type" : "string",
"description" : "Unique URI for the Achievement.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.identifiertypeenum.class"
},
"hashed" : {
"type" : "boolean",
"description" : "Whether or not the `identityHash` value is hashed.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.boolean.class"
},
"type" : {
"type" : "string",
"description" : "MUST be the IRI 'IdentityObject'.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.iri.class"
},
"additionalProperties" : false,
"description" : "A collection of information about the recipient of an achievement.",
"x-class-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.uri.class"
},
"type" : {
"type" : "string",
"description" : "The name of the credential status method.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.credentialstatus.class"
},
"ClrSubject" : {
"required" : [ "type", "verifiableCredential" ],
"type" : "object",
"properties" : {
"identifier" : {
"minItems" : 0,
"type" : "array",
"description" : "Other identifiers for the recipient of the CLR credential. Either `id` or at least one `identifier`is required.",
"items" : {
"$ref" : "#/components/schemas/IdentityObject"
},
"x-srcprop-pid" : "org.1edtech.clr.v2p0.identityobject.class"
},
"achievement" : {
"minItems" : 0,
"type" : "array",
"description" : "The set of achievements the CLR issuer expects the learner to achieve.",
"items" : {
"$ref" : "#/components/schemas/Achievement"
},
"x-srcprop-pid" : "org.1edtech.clr.v2p0.achievement.class"
},
"association" : {
"minItems" : 0,
"type" : "array",
"description" : "Associations describe the semantic relationship between source and target achievements and their assertions.",
"items" : {
"$ref" : "#/components/schemas/Association"
},
"x-srcprop-pid" : "org.1edtech.clr.v2p0.association.class"
},
"id" : {
"type" : "string",
"description" : "An identifier for the recipient of the CLR credential. Either `id` or at least one `identifier` is required.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.uri.class"
},
"type" : {
"minItems" : 1,
"type" : "array",
"description" : "The property MUST contain the IRI `ClrSubject`.",
"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.clr.v2p0.derived.iri.class"
},
"verifiableCredential" : {
"minItems" : 1,
"type" : "array",
"description" : "A set of AchievementCredentials, OpenBadgeCredentials, and other VerifiableCredentials the learner has been awarded. The credential issuers may not be the same entity as the ClrCredential issuer, but the ClrCredential's credential subject is guaranteed to be the same person as the credential subject of each included credential, even if they use different identifiers.",
"items" : {
"$ref" : "#/components/schemas/VerifiableCredential"
},
"x-srcprop-pid" : "org.1edtech.clr.v2p0.verifiablecredential.class"
},
"additionalProperties" : true,
"description" : "A collection of information about the learner that is the subject of this CLR credential.",
"x-class-pid" : "org.1edtech.clr.v2p0.clrsubject.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.imsx_statusinfo.class"
},
"GetClrCredentialsResponse" : {
"type" : "object",
"properties" : {
"credential" : {
"minItems" : 0,
"type" : "array",
"description" : "ClrCredentials that have not been signed with the VC-JWT Proof Format MUST be in the `credential` array.",
"items" : {
"$ref" : "#/components/schemas/ClrCredential"
},
"x-srcprop-pid" : "org.1edtech.clr.v2p0.clrcredential.class"
},
"compactJwsString" : {
"minItems" : 0,
"type" : "array",
"description" : "ClrCredentials 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.clr.v2p0.derived.compactjws.class"
},
"additionalProperties" : false,
"description" : "The GetClrCredentialsResponse complex type.",
"x-class-pid" : "org.1edtech.clr.v2p0.getclrcredentialsresponse.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.clr.v2p0.derived.uri.class"
},
"type" : {
"type" : "string",
"description" : "The value MUST identify the type of the terms of use.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.url.class"
},
"description" : {
"type" : "string",
"description" : "A short description for the security scheme.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"type" : {
"type" : "string",
"description" : "MUST be the string `oauth2`.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"additionalProperties" : true,
"description" : "Defines an OAuth2 security scheme that can be used by the operations.",
"x-class-pid" : "org.1edtech.clr.v2p0.openapioauth2securityscheme.class"
},
"ClrCredential" : {
"required" : [ "@context", "type", "id", "name", "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.clr.v2p0.credentialschema.class"
},
"endorsement" : {
"minItems" : 0,
"type" : "array",
"description" : "Allows endorsers to make specific claims about the ClrCredential, or any AssertionCredential, Achievement, or Profile referenced in the ClrCredential. These endorsements are signed with a Data Integrity proof format.",
"items" : {
"$ref" : "#/components/schemas/EndorsementCredential"
},
"x-srcprop-pid" : "org.1edtech.clr.v2p0.endorsementcredential.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.clr.v2p0.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.clr.v2p0.evidence.class"
},
"credentialSubject" : {
"$ref" : "#/components/schemas/ClrSubject"
},
"description" : {
"type" : "string",
"description" : "Optional description of the CLR. May be displayed by wallet user interfaces.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"validFrom" : {
"type" : "string",
"description" : "Timestamp of when the credential becomes valid.",
"format" : "date-time",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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 IRI `VerifiableCredential`, and one of the items MUST be the IRI `ClrCredential`.",
"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.clr.v2p0.derived.iri.class"
},
"@context" : {
"minItems" : 1,
"type" : "array",
"description" : "The value of the `@context` property MUST be an ordered set where the first three items are the URLs `https://www.w3.org/ns/credentials/v2`, `https://purl.imsglobal.org/spec/clr/v2p0/context-2.0.1.json`, `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.clr.v2p0.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.clr.v2p0.profileref.class"
},
"credentialStatus" : {
"$ref" : "#/components/schemas/CredentialStatus"
},
"endorsementJwt" : {
"minItems" : 0,
"type" : "array",
"description" : "Allows endorsers to make specific claims about the ClrCredential, or any AssertionCredential, Achievement, or Profile referenced in the ClrCredential. 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.clr.v2p0.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.clr.v2p0.termsofuse.class"
},
"name" : {
"type" : "string",
"description" : "The name of the CLR. May be displayed by wallet user interfaces.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.derived.datetimez.class"
},
"id" : {
"type" : "string",
"description" : "Unambiguous reference to the credential.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.proof.class"
},
"partial" : {
"type" : "boolean",
"description" : "True if CLR does not contain all the assertions known by the publisher for the learner at the time the CLR is issued. Useful if you are sending a small set of achievements in real time when they are achieved. If False or omitted, the CLR SHOULD be interpreted as containing all the assertions for the learner known by the publisher at the time of issue.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.boolean.class"
},
"additionalProperties" : true,
"description" : "A ClrCredential is a CLR with all the properties needed to conform with a Verifiable Credential as defined in the [[VC-DATA-MODEL-2.0]].",
"x-class-pid" : "org.1edtech.clr.v2p0.clrcredential.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.clr.v2p0.primitive.string.class"
},
"name" : {
"type" : "string",
"description" : "The name of the rubric criterion level.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"description" : {
"type" : "string",
"description" : "Description of the rubric criterion level.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.alignment.class"
},
"points" : {
"type" : "string",
"description" : "The points associated with this rubric criterion level.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"additionalProperties" : true,
"description" : "Describes a rubric criterion level.",
"x-class-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.url.class"
},
"termsOfService" : {
"type" : "string",
"description" : "A fully qualified URL to the [=resource server=]'s terms of service.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.url.class"
},
"title" : {
"type" : "string",
"description" : "The name of the [=resource server=].",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"version" : {
"type" : "string",
"description" : "The version of the API.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.iri.class"
},
"additionalProperties" : true,
"description" : "A collection of information about the subject of the endorsement.",
"x-class-pid" : "org.1edtech.clr.v2p0.endorsementsubject.class"
},
"GeoCoordinates" : {
"required" : [ "type", "latitude", "longitude" ],
"type" : "object",
"properties" : {
"latitude" : {
"type" : "number",
"description" : "The latitude of the location [[WGS84]].",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.float.class"
},
"type" : {
"type" : "string",
"description" : "MUST be the IRI 'GeoCoordinates'.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.iri.class"
},
"longitude" : {
"type" : "number",
"description" : "The longitude of the location [[WGS84]].",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.float.class"
},
"additionalProperties" : true,
"description" : "The geographic coordinates of a location.",
"x-class-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.derived.uri.class"
},
"type" : {
"type" : "string",
"description" : "The name of the refresh service method.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.iri.class"
},
"additionalProperties" : true,
"description" : "The information in RefreshService is used to refresh the verifiable credential.",
"x-class-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.derived.languagecode.class"
},
"id" : {
"type" : "string",
"description" : "The related achievement.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.derived.iri.class"
},
"version" : {
"type" : "string",
"description" : "The version of the related achievement.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"additionalProperties" : true,
"description" : "Identifies a related achievement.",
"x-class-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"valueMin" : {
"type" : "string",
"description" : "The minimum possible `value` that may be asserted in a linked result.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.uri.class"
},
"name" : {
"type" : "string",
"description" : "The name of the result.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"additionalProperties" : true,
"description" : "Describes a possible achievement result.",
"x-class-pid" : "org.1edtech.clr.v2p0.resultdescription.class"
},
"Proof" : {
"required" : [ "type" ],
"type" : "object",
"properties" : {
"proofValue" : {
"type" : "string",
"description" : "Value of the proof.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"created" : {
"type" : "string",
"description" : "Date the proof was created.",
"format" : "date-time",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"challenge" : {
"type" : "string",
"description" : "A value chosen by the verifier to mitigate authentication proof replay attacks.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"type" : {
"type" : "string",
"description" : "Signature suite used to produce proof.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.derived.iri.class"
},
"verificationMethod" : {
"type" : "string",
"description" : "The URL of the public key that can verify the signature.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"cryptosuite" : {
"type" : "string",
"description" : "The suite used to create the proof.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.primitive.string.class"
},
"additionalProperties" : true,
"description" : "A JSON-LD Linked Data proof.",
"x-class-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class"
},
"validFrom" : {
"type" : "string",
"description" : "Timestamp of when the credential becomes valid.",
"format" : "date-time",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.datetimez.class"
},
"id" : {
"type" : "string",
"description" : "Unambiguous reference to the credential.",
"x-srcprop-pid" : "org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.endorsementcredential.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/clr/v2p0/scope/credential.readonly" : "Permission to read ClrCredentials for the authenticated entity.",
"https://purl.imsglobal.org/spec/clr/v2p0/scope/credential.upsert" : "Permission to create or update ClrCredentials for the authenticated entity.",
"https://purl.imsglobal.org/spec/clr/v2p0/scope/profile.readonly" : "Permission to read the profile for the authenticated entity.",
"https://purl.imsglobal.org/spec/clr/v2p0/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"
F.2
YAML
CLR Standard data model.
openapi: 3.0.1
info:
title: OpenAPI schema for Comprehensive Learner Record Standard
description: CLR Standard data model.
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: "2.0"
x-status: Final
x-model-pid: org.1edtech.clr.v2p0.model
x-service-pid: org.1edtech.clr.v2p0.rest.servicemodel
x-src-operation-count: 5
x-oas-operation-count: 5
servers:
- url: https://example.org/ims/clr/v2p0
description: The above Server URL should be changed to the actual server location.
tags:
- name: ClrCredentials
description: These endpoints are used to exchange ClrCredentials and Profile information.
- name: Discovery
paths:
/credentials:
get:
tags:
- ClrCredentials
summary: The REST GET operation for the getCredentials() API call.
description: "Get issued ClrCredentials from the [=resource server=] for the\
\ supplied parameters and access token."
operationId: getCredentials
parameters:
- name: limit
in: query
description: The maximum number of ClrCredentials 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 ClrCredential to return. (zero indexed)
required: false
allowEmptyValue: false
style: form
schema:
minimum: 0
type: integer
format: int32
- name: since
in: query
description: Only include ClrCredentials 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 ClrCredentials that meet the request parameters.
Paging applies to the total number of ClrCredentials in the response.
headers:
X-Total-Count:
$ref: "#/components/headers/X-Total-Count"
content:
application/json:
schema:
$ref: "#/components/schemas/GetClrCredentialsResponse"
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/clr/v2p0/scope/credential.readonly
x-operation-pid: org.1edtech.clr.v2p0.rest.getcredentials.operation
post:
tags:
- ClrCredentials
summary: The REST POST operation for the upsertCredential() API call.
description: "Create or replace a ClrCredential 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/ClrCredential"
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 ClrCredential was successfully replaced on the [=resource\
\ server=]. The response body MUST be the ClrCredential in the request."
content:
application/json:
schema:
$ref: "#/components/schemas/ClrCredential"
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 ClrCredential was successfully created on the [=resource\
\ server=]. The response body MUST be the ClrCredential in the request."
content:
application/json:
schema:
$ref: "#/components/schemas/ClrCredential"
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/clr/v2p0/scope/credential.upsert
x-operation-pid: org.1edtech.clr.v2p0.rest.upsertcredential.operation
/profile:
get:
tags:
- ClrCredentials
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/clr/v2p0/scope/profile.readonly
x-operation-pid: org.1edtech.clr.v2p0.rest.getprofile.operation
put:
tags:
- ClrCredentials
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/clr/v2p0/scope/profile.update
x-operation-pid: org.1edtech.clr.v2p0.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"
"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"
x-operation-pid: org.1edtech.clr.v2p0.rest.getservicedescription.operation
components:
schemas:
CredentialSubject:
type: object
properties:
id:
type: string
description: The identity of the credential subject.
x-srcprop-pid: org.1edtech.clr.v2p0.derived.uri.class
additionalProperties: true
description: "Claims about the credential subject. Maps to Credential Subject\
\ as defined in the [[VC-DATA-MODEL-2.0]]."
x-class-pid: org.1edtech.clr.v2p0.credentialsubject.class
required:
- type
type: object
properties:
addressCountry:
type: string
description: A country.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.derived.countrycode.class
streetAddress:
type: string
description: A street address within the locality.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
postalCode:
type: string
description: A postal code.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
addressLocality:
type: string
description: A locality within the region.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.derived.iri.class
addressRegion:
type: string
description: A region within the country.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
postOfficeBoxNumber:
type: string
description: A post office box number for PO box addresses.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
additionalProperties: true
description: An address for the described entity.
x-class-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.iri.class
additionalProperties: true
description: Identify the type and location of a data schema.
x-class-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.openapicomponents.class
Image:
required:
- id
- type
type: object
properties:
caption:
type: string
description: The caption for the image.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
id:
type: string
description: The URI or Data URI of the image.
x-srcprop-pid: org.1edtech.clr.v2p0.derived.uri.class
type:
type: string
description: MUST be the IRI 'Image'.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class
description:
type: string
description: A short description of the issuer entity or organization.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class
dateOfBirth:
type: string
description: Birthdate of the person.
format: date
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class
phone:
type: string
description: A phone number.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class
name:
type: string
description: The name of the entity or organization.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
patronymicName:
type: string
description: Patronymic name.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
id:
type: string
description: Unique URI for the Issuer/Profile file.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class
email:
type: string
description: An email address.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.profile.class
VerifiableCredential:
required:
- '@context'
- type
- issuer
- validFrom
- credentialSubject
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.clr.v2p0.credentialschema.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.clr.v2p0.evidence.class
credentialSubject:
$ref: "#/components/schemas/CredentialSubject"
validFrom:
type: string
description: Timestamp of when the credential becomes valid.
format: date-time
x-srcprop-pid: org.1edtech.clr.v2p0.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'.
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.clr.v2p0.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'.
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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.termsofuse.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.clr.v2p0.derived.datetimez.class
id:
type: string
description: Unambiguous reference to the credential.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.proof.class
additionalProperties: true
description: "A Verifiable Credential as defined in the [[VC-DATA-MODEL-2.0]].\
\ As described in [[[#proofs-signatures]]], at least one proof mechanism,\
\ and the details necessary to evaluate that proof, MUST be expressed for\
\ a credential to be a verifiable credential. In the case of an embedded proof,\
\ the credential MUST append the proof in the `proof` property."
x-class-pid: org.1edtech.clr.v2p0.verifiablecredential.class
IdentifierEntry:
required:
- type
- identifier
- identifierType
type: object
properties:
identifier:
type: string
description: An identifier.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.identifiertypeenum.class
type:
type: string
description: MUST be the IRI 'IdentifierEntry'.
x-srcprop-pid: org.1edtech.clr.v2p0.derived.iri.class
additionalProperties: false
description: The IdentifierEntry complex type.
x-class-pid: org.1edtech.clr.v2p0.identifierentry.class
Alignment:
required:
- type
- targetName
- targetUrl
type: object
properties:
targetName:
type: string
description: Name of the alignment.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
targetFramework:
type: string
description: Name of the framework the alignment target.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
targetDescription:
type: string
description: Short description of the alignment target.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.url.class
additionalProperties: true
description: Describes an alignment between an achievement and a node in an
educational framework.
x-class-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.imsx_codeminorfieldvalue.class
additionalProperties: false
description: This is the container for a single code minor status code.
x-class-pid: org.1edtech.clr.v2p0.imsx_codeminorfield.class
Association:
required:
- type
- associationType
- sourceId
- targetId
type: object
properties:
sourceId:
type: string
description: The `id` of the source achievement.
x-srcprop-pid: org.1edtech.clr.v2p0.derived.uri.class
targetId:
type: string
description: The `id` of the target achievement.
x-srcprop-pid: org.1edtech.clr.v2p0.derived.uri.class
associationType:
type: string
description: The type of relationship between a source achievement and a
target achievement. For example the source achievement is the child of
the target achievement.
enum:
- exactMatchOf
- isChildOf
- isParentOf
- isPartOf
- isPeerOf
- isRelatedTo
- precedes
- replacedBy
x-srcprop-pid: org.1edtech.clr.v2p0.associationtype.class
type:
type: string
description: The value of the type property MUST be 'Association'.
x-srcprop-pid: org.1edtech.clr.v2p0.derived.iri.class
additionalProperties: false
description: An Association describes the semantic relationship between two
achievements and the credentials that assert those achievements.
x-class-pid: org.1edtech.clr.v2p0.association.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.clr.v2p0.primitive.string.class
info:
$ref: "#/components/schemas/OpenApiInfo"
additionalProperties: true
description: "The Service Description Document (SDD) is a machine readable document\
\ that contains the description of the service features supported by the Provider/Platform.\
\ The SDD is an OpenAPI 3.0 (JSON) [[OPENAPIS-3.0]] structured document that\
\ MUST be a profiled version of the OpenAPI 3.0 (JSON) file provided provided\
\ with this specification. This profiled version contains all of the details\
\ about the supported set of service end-points, the supported optional data\
\ fields, definitions of the proprietary data fields supplied using the permitted\
\ extension mechanisms, definitions of the available proprietary endpoints,\
\ and information about the security mechanisms."
x-class-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.markdown.class
name:
type: string
description: A descriptive title of the evidence.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class
description:
type: string
description: A longer description of the evidence.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class
description:
type: string
description: A short description of the achievement.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.related.class
name:
type: string
description: The name of the achievement.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class
id:
type: string
description: Unique URI for the Achievement.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.identifiertypeenum.class
hashed:
type: boolean
description: Whether or not the `identityHash` value is hashed.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.boolean.class
type:
type: string
description: MUST be the IRI 'IdentityObject'.
x-srcprop-pid: org.1edtech.clr.v2p0.derived.iri.class
additionalProperties: false
description: A collection of information about the recipient of an achievement.
x-class-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.uri.class
type:
type: string
description: The name of the credential status method.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.credentialstatus.class
ClrSubject:
required:
- type
- verifiableCredential
type: object
properties:
identifier:
minItems: 0
type: array
description: Other identifiers for the recipient of the CLR credential.
Either `id` or at least one `identifier`is required.
items:
$ref: "#/components/schemas/IdentityObject"
x-srcprop-pid: org.1edtech.clr.v2p0.identityobject.class
achievement:
minItems: 0
type: array
description: The set of achievements the CLR issuer expects the learner
to achieve.
items:
$ref: "#/components/schemas/Achievement"
x-srcprop-pid: org.1edtech.clr.v2p0.achievement.class
association:
minItems: 0
type: array
description: Associations describe the semantic relationship between source
and target achievements and their assertions.
items:
$ref: "#/components/schemas/Association"
x-srcprop-pid: org.1edtech.clr.v2p0.association.class
id:
type: string
description: An identifier for the recipient of the CLR credential. Either
`id` or at least one `identifier` is required.
x-srcprop-pid: org.1edtech.clr.v2p0.derived.uri.class
type:
minItems: 1
type: array
description: The property MUST contain the IRI `ClrSubject`.
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.clr.v2p0.derived.iri.class
verifiableCredential:
minItems: 1
type: array
description: "A set of AchievementCredentials, OpenBadgeCredentials, and\
\ other VerifiableCredentials the learner has been awarded. The credential\
\ issuers may not be the same entity as the ClrCredential issuer, but\
\ the ClrCredential's credential subject is guaranteed to be the same\
\ person as the credential subject of each included credential, even if\
\ they use different identifiers."
items:
$ref: "#/components/schemas/VerifiableCredential"
x-srcprop-pid: org.1edtech.clr.v2p0.verifiablecredential.class
additionalProperties: true
description: A collection of information about the learner that is the subject
of this CLR credential.
x-class-pid: org.1edtech.clr.v2p0.clrsubject.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.imsx_statusinfo.class
GetClrCredentialsResponse:
type: object
properties:
credential:
minItems: 0
type: array
description: ClrCredentials that have not been signed with the VC-JWT Proof
Format MUST be in the `credential` array.
items:
$ref: "#/components/schemas/ClrCredential"
x-srcprop-pid: org.1edtech.clr.v2p0.clrcredential.class
compactJwsString:
minItems: 0
type: array
description: ClrCredentials 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.clr.v2p0.derived.compactjws.class
additionalProperties: false
description: The GetClrCredentialsResponse complex type.
x-class-pid: org.1edtech.clr.v2p0.getclrcredentialsresponse.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.clr.v2p0.derived.uri.class
type:
type: string
description: The value MUST identify the type of the terms of use.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.url.class
description:
type: string
description: A short description for the security scheme.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
type:
type: string
description: MUST be the string `oauth2`.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
additionalProperties: true
description: Defines an OAuth2 security scheme that can be used by the operations.
x-class-pid: org.1edtech.clr.v2p0.openapioauth2securityscheme.class
ClrCredential:
required:
- '@context'
- type
- id
- name
- 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.clr.v2p0.credentialschema.class
endorsement:
minItems: 0
type: array
description: "Allows endorsers to make specific claims about the ClrCredential,\
\ or any AssertionCredential, Achievement, or Profile referenced in the\
\ ClrCredential. These endorsements are signed with a Data Integrity proof\
\ format."
items:
$ref: "#/components/schemas/EndorsementCredential"
x-srcprop-pid: org.1edtech.clr.v2p0.endorsementcredential.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.clr.v2p0.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.clr.v2p0.evidence.class
credentialSubject:
$ref: "#/components/schemas/ClrSubject"
description:
type: string
description: Optional description of the CLR. May be displayed by wallet
user interfaces.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
validFrom:
type: string
description: Timestamp of when the credential becomes valid.
format: date-time
x-srcprop-pid: org.1edtech.clr.v2p0.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 IRI `VerifiableCredential`, and one of the\
\ items MUST be the IRI `ClrCredential`."
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.clr.v2p0.derived.iri.class
'@context':
minItems: 1
type: array
description: "The value of the `@context` property MUST be an ordered set\
\ where the first three items are the URLs `https://www.w3.org/ns/credentials/v2`,\
\ `https://purl.imsglobal.org/spec/clr/v2p0/context-2.0.1.json`, `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.clr.v2p0.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.clr.v2p0.profileref.class
credentialStatus:
$ref: "#/components/schemas/CredentialStatus"
endorsementJwt:
minItems: 0
type: array
description: "Allows endorsers to make specific claims about the ClrCredential,\
\ or any AssertionCredential, Achievement, or Profile referenced in the\
\ ClrCredential. 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.clr.v2p0.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.clr.v2p0.termsofuse.class
name:
type: string
description: The name of the CLR. May be displayed by wallet user interfaces.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.derived.datetimez.class
id:
type: string
description: Unambiguous reference to the credential.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.proof.class
partial:
type: boolean
description: "True if CLR does not contain all the assertions known by the\
\ publisher for the learner at the time the CLR is issued. Useful if you\
\ are sending a small set of achievements in real time when they are achieved.\
\ If False or omitted, the CLR SHOULD be interpreted as containing all\
\ the assertions for the learner known by the publisher at the time of\
\ issue."
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.boolean.class
additionalProperties: true
description: "A ClrCredential is a CLR with all the properties needed to conform\
\ with a Verifiable Credential as defined in the [[VC-DATA-MODEL-2.0]]."
x-class-pid: org.1edtech.clr.v2p0.clrcredential.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.clr.v2p0.primitive.string.class
name:
type: string
description: The name of the rubric criterion level.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
description:
type: string
description: Description of the rubric criterion level.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.alignment.class
points:
type: string
description: The points associated with this rubric criterion level.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
additionalProperties: true
description: Describes a rubric criterion level.
x-class-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.url.class
termsOfService:
type: string
description: "A fully qualified URL to the [=resource server=]'s terms of\
\ service."
x-srcprop-pid: org.1edtech.clr.v2p0.derived.url.class
title:
type: string
description: "The name of the [=resource server=]."
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
version:
type: string
description: The version of the API.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.iri.class
additionalProperties: true
description: A collection of information about the subject of the endorsement.
x-class-pid: org.1edtech.clr.v2p0.endorsementsubject.class
GeoCoordinates:
required:
- type
- latitude
- longitude
type: object
properties:
latitude:
type: number
description: "The latitude of the location [[WGS84]]."
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.float.class
type:
type: string
description: MUST be the IRI 'GeoCoordinates'.
x-srcprop-pid: org.1edtech.clr.v2p0.derived.iri.class
longitude:
type: number
description: "The longitude of the location [[WGS84]]."
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.float.class
additionalProperties: true
description: The geographic coordinates of a location.
x-class-pid: org.1edtech.clr.v2p0.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.clr.v2p0.derived.uri.class
type:
type: string
description: The name of the refresh service method.
x-srcprop-pid: org.1edtech.clr.v2p0.derived.iri.class
additionalProperties: true
description: The information in RefreshService is used to refresh the verifiable
credential.
x-class-pid: org.1edtech.clr.v2p0.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.clr.v2p0.derived.languagecode.class
id:
type: string
description: The related achievement.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.derived.iri.class
version:
type: string
description: The version of the related achievement.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
additionalProperties: true
description: Identifies a related achievement.
x-class-pid: org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class
valueMin:
type: string
description: The minimum possible `value` that may be asserted in a linked
result.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.uri.class
name:
type: string
description: The name of the result.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class
additionalProperties: true
description: Describes a possible achievement result.
x-class-pid: org.1edtech.clr.v2p0.resultdescription.class
Proof:
required:
- type
type: object
properties:
proofValue:
type: string
description: Value of the proof.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
created:
type: string
description: Date the proof was created.
format: date-time
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class
challenge:
type: string
description: A value chosen by the verifier to mitigate authentication proof
replay attacks.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class
type:
type: string
description: Signature suite used to produce proof.
x-srcprop-pid: org.1edtech.clr.v2p0.derived.iri.class
verificationMethod:
type: string
description: The URL of the public key that can verify the signature.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.primitive.string.class
cryptosuite:
type: string
description: The suite used to create the proof.
x-srcprop-pid: org.1edtech.clr.v2p0.primitive.string.class
additionalProperties: true
description: A JSON-LD Linked Data proof.
x-class-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.primitive.string.class
validFrom:
type: string
description: Timestamp of when the credential becomes valid.
format: date-time
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.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.clr.v2p0.derived.datetimez.class
id:
type: string
description: Unambiguous reference to the credential.
x-srcprop-pid: org.1edtech.clr.v2p0.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.clr.v2p0.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.clr.v2p0.endorsementcredential.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 ClrCredentials for the authenticated entity.
to create or update ClrCredentials 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
G.
Revision History
Status
Doc Version
Release Date
Comments
Base Document
1.0
May 27, 2022
IPR Review
Candidate Final
1.0
July 14, 2022
Comprehensive Learner Record 2.0 first Candidate Final release
Final
1.0
February 26, 2025
Comprehensive Learner Record 2.0 Final Release
Final
1.0.1
March 14th, 2025
Added
partial
to JSON-LD context
Final
1.0.2
May 20th, 2025
Fixed
CLR Credential
: added missing
evidence
property from VerifiableCredential
Final
1.1
October 14th, 2025
Updated JSON Schemas with support for [
JSON-LD11-API
] compaction process
Deprecated [
VCRL-10
] in favour of [
vc-bitstring-status-list
Credential Status' id is an optional field as defined at [
vc-data-model-2.0
].
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:
[OB-30]
Open Badges Specification v3.0
. 1EdTech. 1EdTech Final Release. 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:
[SVG]
Scalable Vector Graphics (SVG) 1.0 Specification
. Jon Ferraiolo. W3C. 4 September 2001. 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:
[CLR-CERT-20]
Comprehensive Learner Record Standard Conformance and Certification Guide 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-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:
[OPENAPIS-3.0]
OpenAPI Specification 3.0
. OpenAPI Initiative (Linux Foundation). July 2017. 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:
[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, self
Invited Expert
Kerri Lemoie
Concentric Sky, RANDA
Editor
Phillip Long
Concentric Sky
Invited Expert
Marty Reed
RANDA Solutions
Co-chair, CLR
Justin Pitcher
Anthology
Co-chair, OB
Brent Cappriotti
RANDA Solutions
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
Invited Expert
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.5 Conceptual Model
Permalink
Referenced in:
§ 1.4 Terminology
(2)
§ 1.5 Conceptual Model
Permalink
Referenced in:
§ 5. CLR Standard API
(2)
§ 5.1 Architecture
§ 6. CLR Standard API Security
(2)
(3)
(4)
§ 6.1 Using OAuth 2.0 Authorization Code Grant
(2)
§ 6.1.1 ACG - Registration
(2)
(3)
(4)
(5)
§ 6.1.2 ACG - Obtaining Tokens
(2)
(3)
§ 6.1.2.1 ACG - Authorization Request
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
§ 6.1.3 ACG - Authenticating with Tokens
§ 6.2.1 Token Refresh Request
(2)
(3)
(4)
§ 6.3 Token Revocation
§ 6.3.1 Token Revocation Request
(2)
§ 6.4 Dynamic Client Registration
(2)
§ 6.4.1 Request the Service Description Document
(2)
(3)
(4)
(5)
(6)
(7)
§ 6.4.2 Register with Authorization Server
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
Permalink
Referenced in:
§ 1.5 Conceptual Model
§ 5. CLR Standard API
Permalink
Referenced in:
§ 1.4 Terminology
§ 7. Proofs (Signatures)
§ 7.1 Proof Formats
§ 7.2.2 Overview
(2)
(3)
Permalink
Referenced in:
§ 1.4 Terminology
§ 1.5 Conceptual Model
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
§ 1.5 Conceptual Model
Permalink
Referenced in:
§ 1.5 Conceptual Model
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
§ 1.4 Terminology
(2)
§ 7.1 Proof Formats
§ 7.2.2 Overview
§ 7.4 Key Management
Permalink
Referenced in:
§ 1.5 Conceptual Model
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:
§ 1.5 Conceptual Model
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
§ 1.4 Terminology
(2)
§ 5. CLR Standard 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:
§ 5. CLR Standard API
§ 5.1 Architecture
(2)
§ 6. CLR Standard API Security
(2)
(3)
(4)
§ 6.1 Using OAuth 2.0 Authorization Code Grant
§ 6.1.1 ACG - Registration
§ 6.4 Dynamic Client Registration
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
§ 8. Verification and Validation
Permalink
Referenced in:
§ 1.4 Terminology
(2)
(3)
(4)
(5)
(6)
§ 7. Proofs (Signatures)
§ 7.2.2 Overview
§ 7.2.4.1 Sign Nested Credentials
§ 8. Verification and Validation
§ 9. Credential equality and comparison algorithm
§ 10. Verifiable Credentials Extensions
§ A. Serialization
§ A.2 JSON-LD
(2)
(3)
§ A.2.1 Compacted document form
Permalink
Referenced in:
§ 1.4 Terminology
(2)
(3)
(4)
Permalink
Referenced in:
§ 7. Proofs (Signatures)
§ 8. Verification and Validation
(2)
Permalink
Referenced in:
§ 1.4 Terminology
§ 7.1 Proof Formats
§ 7.5 Dereferencing the Public Key
Permalink
Referenced in:
§ 2.2 Recent graduate wants to hold a copy of their own official transcript
§ 2.3 Job applicant provides proof of degree and transcript to potential employer
§ 2.4 Job applicant provides proof of degree and specific courses/engagements from the CLR
§ 2.5 Higher Ed Competency-Based Education
§ 2.6 Issuer Asserting All Student Achievements Comprehensively as a CLR
§ 2.7 Issuer Asserting Partial Transcript at Intermediate Points in Learning Journey
§ 2.8 Issuer Asserting Student Up to Date Partial Transcript of Achievements as CLR on Request
Permalink
Referenced in:
§ 2.2 Recent graduate wants to hold a copy of their own official transcript
§ 2.6 Issuer Asserting All Student Achievements Comprehensively as a CLR
§ 2.7 Issuer Asserting Partial Transcript at Intermediate Points in Learning Journey
§ 2.8 Issuer Asserting Student Up to Date Partial Transcript of Achievements as CLR on Request
§ 2.12 Students in Tutoring Program
Permalink
Referenced in:
§ 2.3 Job applicant provides proof of degree and transcript to potential employer
§ 2.4 Job applicant provides proof of degree and specific courses/engagements from the CLR
§ 2.9 Internal Organizational Staff Development and Promotion
§ 2.10 Teacher Placement with a District
Permalink
Referenced in:
§ 2.5 Higher Ed Competency-Based Education
§ 2.9 Internal Organizational Staff Development and Promotion
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:
§ 5.1 Architecture
(2)
§ 5.5 Retry Behavior
§ 6.1 Using OAuth 2.0 Authorization Code Grant
§ 6.1.2 ACG - Obtaining Tokens
§ 6.1.2.1 ACG - Authorization Request
(2)
(3)
(4)
(5)
§ 6.1.3 ACG - Authenticating with Tokens
§ 6.2.1 Token Refresh Request
(2)
§ 6.4 Dynamic Client Registration
§ 6.4.1 Request the Service Description Document
§ 6.4.2 Register with Authorization Server
(2)
(3)
(4)
Permalink
Referenced in:
§ 6.1 Using OAuth 2.0 Authorization Code Grant
§ 6.1.2 ACG - Obtaining Tokens
§ 6.1.2.1 ACG - Authorization Request
(2)
Permalink
Referenced in:
§ 5.1 Architecture
§ 6.1 Using OAuth 2.0 Authorization Code Grant
§ 6.1.1 ACG - Registration
(2)
§ 6.1.2 ACG - Obtaining Tokens
§ 6.1.2.1 ACG - Authorization Request
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
§ 6.2 Token Refresh
(2)
§ 6.2.2 Token Refresh Response
(2)
§ 6.3.2 Token Revocation Response
(2)
§ 6.4 Dynamic Client Registration
(2)
§ 6.4.2 Register with Authorization Server
(2)
(3)
(4)
(5)
(6)
(7)
(8)
§ B.5.5 OpenApiSecuritySchemes
Permalink
Referenced in:
§ 5. CLR Standard API
§ 5.1 Architecture
(2)
(3)
(4)
§ 5.2.2 getCredentials
§ 5.2.3 upsertCredential
(2)
§ 5.2.3.2 Responses
(2)
(3)
(4)
§ 5.2.4 getProfile
§ 5.2.5.1 Request
(2)
§ 5.2.5.2 Responses
§ 5.3.1 getServiceDescription
§ 5.4 Paging
(2)
§ 5.5 Retry Behavior
§ 6.1.2.1 ACG - Authorization Request
(2)
§ 6.1.3 ACG - Authenticating with Tokens
§ 6.4 Dynamic Client Registration
§ 6.4.1 Request the Service Description Document
(2)
(3)
(4)
(5)
§ 6.4.2 Register with Authorization Server
(2)
(3)
(4)
§ B.5.1 ServiceDescriptionDocument
§ B.5.3 OpenApiInfo
(2)
(3)
(4)
Permalink
Referenced in:
§ 7.1 Proof Formats
§ 7.2.2 Overview
Permalink
Referenced in:
§ 7.1 Proof Formats
§ 7.2.2 Overview
(2)
(3)
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
§ 4.1 File Format
§ 4.2 Web Resource
§ 4.3.1.1 Baking
§ 4.3.1.2 Extracting
§ 4.3.2.1 Baking
§ 7.2 JSON Web Token Proof Format
§ 7.2.2 Overview
(2)
Permalink
Referenced in:
§ 7.2.2 Overview
§ 7.2.3 Create the JOSE Header
Permalink
Referenced in:
§ 7.2.2 Overview
(2)
(3)
Permalink
Referenced in:
Not referenced in this document.
Permalink
Referenced in:
§ 5.2.3 upsertCredential
Sharebar?