LearningOutcome
statements regarding what a learner knows, understands and is able to do on completion of a learning process, which are defined in terms of knowledge, skills and responsibility and autonomy (https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32017H0615(01)&from=EN)
Properties
| Name | Type | Description |
|---|---|---|
| learningOutcomeId | string | Unique id of this learning outcome |
| primaryCode | object | The primary human readable identifier for this learning outcome. This is often the source identifier as defined by the institution. |
| name | array | The name of this learning outcome |
| abbreviation | stringnull | The abbreviation or internal code used to identify this LearningOutcome |
| description | arraynull | The description of this learning outcome. |
| parentIds | arraynull | The identifiers of the learning outcomes which are the parents of this learning outcome. When the client does not request expansion of `parents`, only these identifiers are returned. This field is [`e |
| parents | arraynull | The expanded learning outcome objects which are the parents of this learning outcome. When the client requests expansion of `parents`, the full expanded learning outcome objects MUST be returned here |
| childIds | arraynull | The identifiers of all learning outcomes for which this learning outcome is the parent. When the client does not request expansion of `children`, only these identifiers are returned. This field is [`e |
| children | arraynull | The expanded learning outcome objects for which this learning outcome is the parent. When the client requests expansion of `children`, the full expanded learning outcome objects MUST be returned here |
| fieldsOfStudy | stringnull | Field(s) of study (e.g. ISCED-F) (https://unesdoc.unesco.org/ark:/48223/pf0000228085.locale=en). ISCED-F categorizes the fields of study 2 digits at root level and further subdivision as more digits a |
| otherCodes | arraynull | An array of additional human readable codes/identifiers for the entity being described. |
| complexityLevel | object | |
| validFrom | stringnull | The date and time for when this learning outcome will be active. Should be a string formatted as an RFC3099 full-date. |
| validTo | stringnull | The date and time when this learning outcome will no longer be valid, or should be renewed. Should be a string formatted as an RFC3099 full-date. |
| consumer | object | |
| ext | object |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/open-education-api/main/json-schema/open-education-api-learning-outcome-schema.json",
"title": "LearningOutcome",
"description": "statements regarding what a learner knows, understands and is able to do on completion of a learning process, which are defined in terms of knowledge, skills and responsibility and autonomy (https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32017H0615(01)&from=EN)",
"x-generated": "2026-10-09",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/open-education-api-openapi.yml#/components/schemas/LearningOutcome",
"type": "object",
"required": [
"learningOutcomeId",
"primaryCode",
"name"
],
"properties": {
"learningOutcomeId": {
"type": "string",
"description": "Unique id of this learning outcome",
"format": "uuid"
},
"primaryCode": {
"description": "The primary human readable identifier for this learning outcome. This is often the source identifier as defined by the institution.",
"$ref": "#/$defs/IdentifierEntry"
},
"name": {
"type": "array",
"description": "The name of this learning outcome",
"minItems": 1,
"items": {
"$ref": "#/$defs/LanguageTypedString"
}
},
"abbreviation": {
"type": [
"string",
"null"
],
"description": "The abbreviation or internal code used to identify this LearningOutcome",
"maxLength": 256
},
"description": {
"type": [
"array",
"null"
],
"description": "The description of this learning outcome.",
"minItems": 1,
"items": {
"$ref": "#/$defs/LanguageTypedString"
}
},
"parentIds": {
"description": "The identifiers of the learning outcomes which are the parents of this learning outcome.\nWhen the client does not request expansion of `parents`, only these identifiers are returned.\nThis field is [`expandable`](https://oeapi.eu/v6.0/#/technical/expanding-responses).\n",
"type": [
"array",
"null"
],
"items": {
"$ref": "#/$defs/Identifier"
}
},
"parents": {
"description": "The expanded learning outcome objects which are the parents of this learning outcome.\nWhen the client requests expansion of `parents`, the full expanded learning outcome objects MUST be returned here instead of only the identifiers.\nIf no parents are defined, this value is `null`.\n",
"type": [
"array",
"null"
],
"items": {
"oneOf": [
{
"$ref": "#/$defs/LearningOutcome"
},
{
"type": "null"
}
]
}
},
"childIds": {
"description": "The identifiers of all learning outcomes for which this learning outcome is the parent.\nWhen the client does not request expansion of `children`, only these identifiers are returned.\nThis field is [`expandable`](https://oeapi.eu/v6.0/#/technical/expanding-responses).\n\nAlthough `childIds` and `children` (for example `organisationIds` versus `organisations`) may \nseem unusual, this naming is intentional and follows the singular–plural convention defined \nby the specification.\n",
"type": [
"array",
"null"
],
"items": {
"$ref": "#/$defs/Identifier"
}
},
"children": {
"description": "The expanded learning outcome objects for which this learning outcome is the parent.\nWhen the client requests expansion of `children`, the full expanded learning outcome objects MUST be returned here instead of only the identifiers.\nIf no children are defined, this value is `null`.\n",
"type": [
"array",
"null"
],
"items": {
"oneOf": [
{
"$ref": "#/$defs/LearningOutcome"
},
{
"type": "null"
}
]
}
},
"fieldsOfStudy": {
"type": [
"string",
"null"
],
"description": "Field(s) of study (e.g. ISCED-F) (https://unesdoc.unesco.org/ark:/48223/pf0000228085.locale=en). \nISCED-F categorizes the fields of study 2 digits at root level and further subdivision as more digits are added.\nPreferably fieldsOfStudy contains at least 4 digits.\nISCEDF2013vSOI2021 currently allows for 6 digits max (https://www.cbs.nl/-/media/cbs/onze-diensten/methoden/classificaties/documents/2025/pubsoi2021_ed2425.pdf).\n07 Engineering, manufacturing and construction\n073 Architecture and construction\n0731 Architecture and town planning\n073101 Town planning\n",
"minLength": 2,
"maxLength": 6
},
"otherCodes": {
"type": [
"array",
"null"
],
"description": "An array of additional human readable codes/identifiers for the entity being described.",
"items": {
"$ref": "#/$defs/IdentifierEntry"
}
},
"complexityLevel": {
"oneOf": [
{
"$ref": "#/$defs/learningOutcomeLevel"
},
{
"type": "null"
}
]
},
"validFrom": {
"type": [
"string",
"null"
],
"description": "The date and time for when this learning outcome will be active. Should be a string formatted as an RFC3099 full-date.",
"format": "date-time"
},
"validTo": {
"type": [
"string",
"null"
],
"description": "The date and time when this learning outcome will no longer be valid, or should be renewed. Should be a string formatted as an RFC3099 full-date.",
"format": "date-time"
},
"consumer": {
"oneOf": [
{
"$ref": "#/$defs/Consumer"
},
{
"type": "null"
}
]
},
"ext": {
"oneOf": [
{
"$ref": "#/$defs/Ext"
},
{
"type": "null"
}
]
}
},
"$defs": {
"Consumer": {
"type": "object",
"description": "The additional elements of a consumer that may be provided, see the [documentation on support for specific consumers](https://oeapi.eu/v6.0/#/technical/consumers-and-profiles/) for further information about this mechanism.",
"required": [
"consumerKey"
],
"properties": {
"consumerKey": {
"description": "The key of the consumer (destination) for which this information is intended. See the [consumer registry](https://oeapi.eu/v6.0/#/technical/consumers-and-profiles/). This key is used to select the additional data to be presented in the request.",
"type": "string"
},
"exampleProperty": {
"description": "An example of an additional property",
"type": [
"string",
"null"
]
}
},
"additionalProperties": true
},
"Ext": {
"type": "object",
"description": "Object for additional non-standard attributes"
},
"Identifier": {
"type": "string",
"description": "An identifier of another resource.",
"format": "uuid"
},
"IdentifierEntry": {
"type": "object",
"properties": {
"codeType": {
"$ref": "#/$defs/codeType"
},
"code": {
"description": "Human readable value for the code/identifier",
"type": "string"
}
},
"required": [
"codeType",
"code"
],
"additionalProperties": false
},
"Language": {
"description": "The language used in the described entity. The value **must be a language tag that conforms to RFC 5646** (Tags for Identifying Languages, BCP 47):\nhttps://www.rfc-editor.org/rfc/rfc5646.html\n\nA tag consists of the following components, in this exact order:\n1. **language** – two‑ to three‑letter codes (ISO 639‑1/‑2) **or** four‑letter codes (ISO 639‑5) **or** five‑ to eight‑letter registered language subtags.\n2. **script** – optional, four letters in Title‑Case (e.g. `Latn`, `Hant`).\n3. **region** – optional, either two uppercase letters (ISO 3166‑1) **or** three digits (UN M.49).\n4. **variant** – zero or more subtags, each either five‑ to eight‑alphanumerics or a digit followed by three alphanumerics (e.g. `1901`, `oxendict`).\n5. **extension** – zero or more extensions. Each extension starts with a *singleton* (a single alphanumeric character except `x`) followed by one or more subtags of two‑ to eight‑alphanumerics (e.g. `u‑co‑phonebk`).\n6. **private‑use** – optional, the letter `x` followed by one or more subtags of one‑ to eight‑alphanumerics (e.g. `x‑private`).\n\nThe most common form is a two‑letter language code (ISO 639‑1) optionally followed by a hyphen and a two‑letter country code (ISO 3166‑1), for example `en` or `en‑GB`.\n\nMore specific tags are also valid, for instance `zh‑Hant‑TW` (Traditional Chinese as used in Taiwan).\n\nFor sign languages two conventions are recognised:\n* `sgn` – e.g. `nl‑sgn‑NL` (Dutch Sign Language)\n* `s` – e.g. `nl‑s‑NL` (Dutch Sign Language)\n",
"type": "string",
"minLength": 2,
"pattern": "^(?:(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,2}|[A-Za-z]{4}|[A-Za-z]{5,8})(?:-[A-Za-z]{4})?(?:-(?:[A-Z]{2}|[0-9]{3}))?(?:-(?:[A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3}))*?(?:-(?:[A-WY-Za-wy-z0-9](?:-[A-Za-z0-9]{2,8})+))*?(?:-x(?:-[A-Za-z0-9]{1,8})+)?|x(?:-[A-Za-z0-9]{1,8})+)$"
},
"LanguageTypedString": {
"type": "object",
"description": "A String with an associated language code. IF this object is used both fields are mandatory.",
"required": [
"language",
"value"
],
"properties": {
"language": {
"$ref": "#/$defs/Language"
},
"value": {
"description": "String to describe the entity.",
"type": "string"
}
}
},
"LearningOutcome": {
"type": "object",
"description": "statements regarding what a learner knows, understands and is able to do on completion of a learning process, which are defined in terms of knowledge, skills and responsibility and autonomy (https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32017H0615(01)&from=EN)",
"required": [
"learningOutcomeId",
"primaryCode",
"name"
],
"properties": {
"learningOutcomeId": {
"type": "string",
"description": "Unique id of this learning outcome",
"format": "uuid"
},
"primaryCode": {
"description": "The primary human readable identifier for this learning outcome. This is often the source identifier as defined by the institution.",
"$ref": "#/$defs/IdentifierEntry"
},
"name": {
"type": "array",
"description": "The name of this learning outcome",
"minItems": 1,
"items": {
"$ref": "#/$defs/LanguageTypedString"
}
},
"abbreviation": {
"type": [
"string",
"null"
],
"description": "The abbreviation or internal code used to identify this LearningOutcome",
"maxLength": 256
},
"description": {
"type": [
"array",
"null"
],
"description": "The description of this learning outcome.",
"minItems": 1,
"items": {
"$ref": "#/$defs/LanguageTypedString"
}
},
"parentIds": {
"description": "The identifiers of the learning outcomes which are the parents of this learning outcome.\nWhen the client does not request expansion of `parents`, only these identifiers are returned.\nThis field is [`expandable`](https://oeapi.eu/v6.0/#/technical/expanding-responses).\n",
"type": [
"array",
"null"
],
"items": {
"$ref": "#/$defs/Identifier"
}
},
"parents": {
"description": "The expanded learning outcome objects which are the parents of this learning outcome.\nWhen the client requests expansion of `parents`, the full expanded learning outcome objects MUST be returned here instead of only the identifiers.\nIf no parents are defined, this value is `null`.\n",
"type": [
"array",
"null"
],
"items": {
"oneOf": [
{
"$ref": "#/$defs/LearningOutcome"
},
{
"type": "null"
}
]
}
},
"childIds": {
"description": "The identifiers of all learning outcomes for which this learning outcome is the parent.\nWhen the client does not request expansion of `children`, only these identifiers are returned.\nThis field is [`expandable`](https://oeapi.eu/v6.0/#/technical/expanding-responses).\n\nAlthough `childIds` and `children` (for example `organisationIds` versus `organisations`) may \nseem unusual, this naming is intentional and follows the singular–plural convention defined \nby the specification.\n",
"type": [
"array",
"null"
],
"items": {
"$ref": "#/$defs/Identifier"
}
},
"children": {
"description": "The expanded learning outcome objects for which this learning outcome is the parent.\nWhen the client requests expansion of `children`, the full expanded learning outcome objects MUST be returned here instead of only the identifiers.\nIf no children are defined, this value is `null`.\n",
"type": [
"array",
"null"
],
"items": {
"oneOf": [
{
"$ref": "#/$defs/LearningOutcome"
},
{
"type": "null"
}
]
}
},
"fieldsOfStudy": {
"type": [
"string",
"null"
],
"description": "Field(s) of study (e.g. ISCED-F) (https://unesdoc.unesco.org/ark:/48223/pf0000228085.locale=en). \nISCED-F categorizes the fields of study 2 digits at root level and further subdivision as more digits are added.\nPreferably fieldsOfStudy contains at least 4 digits.\nISCEDF2013vSOI2021 currently allows for 6 digits max (https://www.cbs.nl/-/media/cbs/onze-diensten/methoden/classificaties/documents/2025/pubsoi2021_ed2425.pdf).\n07 Engineering, manufacturing and construction\n073 Architecture and construction\n0731 Architecture and town planning\n073101 Town planning\n",
"minLength": 2,
"maxLength": 6
},
"otherCodes": {
"type": [
"array",
"null"
],
"description": "An array of additional human readable codes/identifiers for the entity being described.",
"items": {
"$ref": "#/$defs/IdentifierEntry"
}
},
"complexityLevel": {
"oneOf": [
{
"$ref": "#/$defs/learningOutcomeLevel"
},
{
"type": "null"
}
]
},
"validFrom": {
"type": [
"string",
"null"
],
"description": "The date and time for when this learning outcome will be active. Should be a string formatted as an RFC3099 full-date.",
"format": "date-time"
},
"validTo": {
"type": [
"string",
"null"
],
"description": "The date and time when this learning outcome will no longer be valid, or should be renewed. Should be a string formatted as an RFC3099 full-date.",
"format": "date-time"
},
"consumer": {
"oneOf": [
{
"$ref": "#/$defs/Consumer"
},
{
"type": "null"
}
]
},
"ext": {
"oneOf": [
{
"$ref": "#/$defs/Ext"
},
{
"type": "null"
}
]
}
}
},
"codeType": {
"type": "string",
"description": "The type of code or identifier.\n\nThe predefined values are:\n\n| Code | Description |\n|---------------------------|-------------------------------------------------------------------|\n| `account_id` | Identifier for an account. |\n| `bag_id` | Identifier for a building in the Dutch Building and Address |\n| | Registry (BAG). |\n| `building_id` | Identifier for a building. |\n| `component_code` | Identifier for a component (part of a course). |\n| `eckid` | Identifier assigned within the Dutch *Educatieve ContentKeten iD* |\n| | framework. It enables persistent identification and exchange of |\n| | digital learning resources within the Dutch educational sector for|\n| | EQF levels 1, 2, 3 and 4. Comparable international approaches |\n| | include LRMI, DOI and Handle |\n| | identifiers for learning resources. |\n| `email_address` | An email address. |\n| `esi` | European Student Identifier. |\n| `group_code` | Identifier for a group of people. |\n| `group_type_code` | Identifier for the type of group. |\n| `identifier` | Generic identifier. |\n| `institution_code` | Registration number of an educational institution. In the |\n| | Netherlands, the former BRIN code has been replaced by the |\n| | institution code, issued by the Ministry of Education, Culture |\n| | and Science (OCW). |\n| `isbn` | International Standard Book Number (for books). |\n| `issn` | International Standard Serial Number (for periodicals). |\n| `kvk_organisation_id` | Identifier for a KvK (Dutch Chamber of Commerce) registered |\n| | organisation. |\n| `kvk_establishment_id` | Identifier for a specific establishment of a KvK |\n| | (Dutch Chamber of Commerce) registered organisation. |\n| `leerbedrijf_id` | Dutch registration/accreditation id for organisations offering |\n| | internships for vocational education students. |\n| `national_identity_number`| Government-assigned personal identifier (e.g. NI number in the UK,|\n| | or *personnummer* in Sweden). |\n| `offering_code` | Identifier for a specific offering (programme, course or |\n| | component). |\n| `organisation_id` | Identifier for an organisation. |\n| `orcid` | Open Researcher and Contributor ID. |\n| `product_id` | Identifier for a product. |\n| `programme_code` | Identifier of a programme (a recognised collection of courses). |\n| | In the Netherlands, the former CREBO and CROHO codes have been |\n| | replaced by the programme code as registered in RIO, under the |\n| | authority of OCW. |\n| `room_code` | Identifier for a room. |\n| `schac_home` | Home organisation represented by its domain name. |\n| `student_number` | Identifier for a student. |\n| `studielink_number` | Identifier assigned to a student by Studielink (Dutch central |\n| | enrolment system). |\n| `system_id` | Identifier used within a specific system. |\n| `username` | User login name. |\n| `uuid` | Universally unique identifier. |\n\nThis is an *extensible enumeration*. Use the prefix `x-` for custom values.\n",
"x-ooapi-extensible-enum": [
"account_id",
"bag_id",
"building_id",
"component_code",
"eckid",
"email_address",
"esi",
"group_code",
"group_type_code",
"identifier",
"institution_code",
"isbn",
"issn",
"kvk_organisation_id",
"kvk_establishment_id",
"leerbedrijf_id",
"offering_code",
"organisation_id",
"orcid",
"product_id",
"programme_code",
"room_code",
"schac_home",
"student_number",
"studielink_number",
"system_id",
"username",
"uuid",
"national_identity_number"
]
},
"learningOutcomeLevel": {
"type": "string",
"description": "The level of the learning outcome. This field supports multiple frameworks for\ndescribing cognitive complexity. Two common frameworks are provided below: **Bloom’s**\nand **SOLO**. These are intended as examples — additional levels or entirely\ndifferent frameworks MAY be added as needed.\n\n**Bloom’s taxonomy** ([https://en.wikipedia.org/wiki/Bloom's_taxonomy](https://en.wikipedia.org/wiki/Bloom's_taxonomy)):\n\n| Level | Label | Description |\n|---------|------------|---------------------------------------------------------------------|\n| bloom_1 | Remember | Recall facts and basic concepts (define, list, state). |\n| bloom_2 | Understand | Explain ideas or concepts (describe, discuss, explain). |\n| bloom_3 | Apply | Use knowledge in new situations (implement, solve, use). |\n| bloom_4 | Analyse | Draw connections among ideas (differentiate, compare, examine). |\n| bloom_5 | Evaluate | Justify a decision or course of action (critique, assess, argue). |\n| bloom_6 | Create | Produce new or original work (design, construct, develop). |\n\n**SOLO taxonomy** ([https://en.wikipedia.org/wiki/Structure_of_observed_learning_outcome](https://en.wikipedia.org/wiki/Structure_of_observed_learning_outcome)):\n\n| Level | Label | Description |\n|---------|-------------------|-----------------------------------------------------------------|\n| solo_0 | Prestructural | No understanding; the student misses the point. |\n| solo_1 | Unistructural | Identifies or carries out simple procedures; limited to one |\n| | | relevant aspect. |\n| solo_2 | Multistructural | Addresses several relevant aspects, but sees them as unrelated; |\n| | | knowledge is additive. |\n| solo_3 | Relational | Integrates aspects into a coherent whole, showing deeper |\n| | | understanding of relationships. |\n| solo_4 | Extended abstract | Generalises and applies learning to new domains, showing |\n| | | theoretical and abstract thinking. |\n\nThis is an *extensible enumeration*. Implementers MAY introduce other recognised\ntaxonomies, institutional or national frameworks. \n",
"x-ooapi-extensible-enum": [
"bloom_1",
"bloom_2",
"bloom_3",
"bloom_4",
"bloom_5",
"bloom_6",
"solo_0",
"solo_1",
"solo_2",
"solo_3",
"solo_4"
]
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
curl "https://apis.io/api/v1/json-schemas/open-education-api-learning-outcome"
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.