Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,41 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [6.1-RC.1 (main) Date-time attributes on education specifications ] - 2026-06-17

### Added
- Added FirstPossibleOfferingStartDateTime to Programme, Course, LearningComponent and TestComponent
- Added LastPossibleOfferingStartDateTime to Programme, Course, LearningComponent and TestComponent
- Added lastPossibleOfferingEndDateTime to Programme, Course, LearningComponent and TestComponent
## [6.1-RC.1 Replace RFC 7807 with RFC 9457] - 2026-06-18

### fixed
- Replace RFC 7807 with RFC 9457 for errorhandling.

## [6.1-RC.1 (main) Update based on missing features for(Dutch) OKE project] - 2026-04-07

### Fixed
- Added attempt objects to PATCH TestComponentOfferingAssociationAttemptInstance
- Added first and number of attempts to TestComponentOfferingAssociation
- Made attempts attribute deprecated on TestComponentOfferingAssociation
- Added non required primaryCode and otherCodes to associations
- Added an optional resultValueType property to the Result schema object

## [6.0-RC.3 Fix typo in AcademicSessionCourseOfferingCollection.yaml] - 2026-07-14

### Fixed
- Fixed the `AcademicSessionCourseCollection` response schema by correctly defining `items` as an array of `CourseOffer` objects.

## [6.0-RC.3 Solved filter parameter issue] - 2026-07-09

### Fixed
- Merged the filter_query and filter_query[__or][] parameter definitions into a single filter_query parameter to clarify deepObject encoding.

## [6.0-RC.3 Solved content-type issue] - 2026-07-09

### Fixed
- Content-type updated to application/vnd.oeapi+json

## [6.0-RC.2 Solved documentation issue] - 2026-05-12

### Fixed
Expand Down
4 changes: 2 additions & 2 deletions redocly.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@ rules:
response-mime-type:
severity: error
allowedValues:
- application/json
- application/vnd.oeapi+json
- application/problem+json
- application/octet-stream
- application/merge-patch+json

request-mime-type:
severity: error
allowedValues:
- application/json
- application/vnd.oeapi+json
- application/problem+json
- application/octet-stream
- application/merge-patch+json
Expand Down
51 changes: 0 additions & 51 deletions source/ooapi.yaml

Large diffs are not rendered by default.

33 changes: 1 addition & 32 deletions source/ooapiv6.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25448,38 +25448,7 @@ components:
- **Only offerings with email contact present**
`filter_query[contacts.email][is]=not_empty`
schema: *ref_20
filterQueryOr:
name: filter_query[__or][]
in: query
required: false
style: deepObject
explode: true
description: |
OR blocks. Provide an array of single-field filter objects, each combined with OR.
Serialises as `filter_query[__or][][field][operation]=value`.

Inspired by Storyblok (https://www.storyblok.com/docs/api/content-delivery/v2/filter-queries)

Wildcards:
- Prefer using only the asterisk `*` as a wildcard for partial matches (e.g., like).

Implementation note:
- The availability and behaviour of this query functionality are entirely determined by the organisation hosting
the API implementation. It is not mandatory for implementers to support this functionality, and it cannot be enforced
upon organisations that provide or consume OOAPI endpoints.
- It is up to each implementer to decide whether to support this feature. It is **not** a requirement of the OOAPI
standard itself.
- Consumers or working groups that wish to apply specific filtering mechanisms are encouraged to do so using
this approach for the sake of consistency across implementations.

Examples:
- **Provider is Org A or Org B, OR campus city contains “Utrecht”**
`?filter_query[__or][][organisation.id][in]=org-uu,org-hku&filter_query[__or][][campus.city][like]=*Utrecht*`

- **Start date after 1 Sept 2025 OR has evening/block_week tag**
`?filter_query[__or][][start_date][gt_date]=2025-09-01T00:00:00Z&filter_query[__or][][tags][any_in_array]=evening,block_week`
schema: *ref_21
fields:
fields:
name: fields
in: query
required: false
Expand Down
43 changes: 42 additions & 1 deletion source/parameters/filterQuery.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ description: |
Filter object serialised as `filter_query[field][operation]=value`.
Multiple top-level fields are combined with AND. CSV is accepted where noted.

OR blocks. Provide an array of single-field filter objects, each combined with OR.
Serialises as `filter_query[__or][][field][operation]=value`.

Inspired by Storyblok (https://www.storyblok.com/docs/api/content-delivery/v2/filter-queries)

Wildcards:
Expand All @@ -26,10 +29,48 @@ description: |
`filter_query[programme.code][in]=B-IT-2025&filter_query[organisation.code][in]=RuG&filter_query[mode_of_delivery][in]=on_campus,hybrid&filter_query[language_of_instruction][in]=en-GB&filter_query[start_date][gt_date]=2025-09-01T00:00:00Z`

- **Only offerings with email contact present**
`filter_query[contacts.email][is]=not_empty`
`filter_query[contacts.email][is]=not_empty`

- **Provider is Org A or Org B, OR campus city contains “Utrecht”**
`?filter_query[__or][][organisation.id][in]=org-uu,org-hku&filter_query[__or][][campus.city][like]=*Utrecht*`

- **Start date after 1 Sept 2025 OR has evening/block_week tag**
`?filter_query[__or][][start_date][gt_date]=2025-09-01T00:00:00Z&filter_query[__or][][tags][any_in_array]=evening,block_week`

schema:
type: object
properties:
__or:
type: array
items:
type: object
additionalProperties:
type: object
properties:
in:
type: string
description: Exact match; multiple values allowed as CSV.
example: org-uu,org-hku
like:
type: string
description: |
Partial match using wildcards. Prefer `*` as the wildcard.
# Quotes are required here because YAML interprets unquoted * as an alias reference.
example: "*Utrecht*"
any_in_array:
type: string
description: Match if any of the CSV values occur.
example: evening,block_week
gt_date:
type: string
format: date-time
description: ISO 8601 / RFC 3339 date-time.
example: 2025-09-01T00:00:00Z
lt_date:
type: string
format: date-time
description: ISO 8601 / RFC 3339 date-time.
example: 2025-12-31T23:59:59Z
additionalProperties:
type: object
properties:
Expand Down
78 changes: 0 additions & 78 deletions source/parameters/filterQueryOr.yaml

This file was deleted.

3 changes: 1 addition & 2 deletions source/paths/AcademicSessionCollection.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ get:
- $ref: '../parameters/pageNumber.yaml'
- $ref: '../parameters/consumer.yaml'
- $ref: '../parameters/filterQuery.yaml'
- $ref: '../parameters/filterQueryOr.yaml'
- $ref: '../parameters/fields.yaml'
- name: academicSessionType
in: query
Expand All @@ -36,7 +35,7 @@ get:
'200':
description: OK
content:
application/json:
application/vnd.oeapi+json:
schema:
allOf:
- $ref: '../schemas/Pagination.yaml'
Expand Down
7 changes: 4 additions & 3 deletions source/paths/AcademicSessionCourseOfferingCollection.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ get:
- $ref: '../parameters/pageNumber.yaml'
- $ref: '../parameters/consumer.yaml'
- $ref: '../parameters/filterQuery.yaml'
- $ref: '../parameters/filterQueryOr.yaml'
- $ref: '../parameters/fields.yaml'
- $ref: '../parameters/search.yaml'
- $ref: '../parameters/teachingLanguage.yaml'
Expand Down Expand Up @@ -45,7 +44,7 @@ get:
'200':
description: OK
content:
application/json:
application/vnd.oeapi+json:
schema:
allOf:
- $ref: '../schemas/Pagination.yaml'
Expand All @@ -54,7 +53,9 @@ get:
- items
properties:
items:
$ref: '../schemas/CourseOffering.yaml'
type: array
items:
$ref: '../schemas/CourseOffering.yaml'
ext:
$ref: '../schemas/Ext.yaml'
'400':
Expand Down
2 changes: 1 addition & 1 deletion source/paths/AcademicSessionInstance.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ get:
'200':
description: OK
content:
application/json:
application/vnd.oeapi+json:
schema:
$ref: '../schemas/AcademicSession.yaml'
'400':
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ get:
- $ref: '../parameters/pageNumber.yaml'
- $ref: '../parameters/consumer.yaml'
- $ref: '../parameters/filterQuery.yaml'
- $ref: '../parameters/filterQueryOr.yaml'
- $ref: '../parameters/fields.yaml'
- $ref: '../parameters/search.yaml'
- $ref: '../parameters/teachingLanguage.yaml'
Expand Down Expand Up @@ -45,7 +44,7 @@ get:
'200':
description: OK
content:
application/json:
application/vnd.oeapi+json:
schema:
allOf:
- $ref: '../schemas/Pagination.yaml'
Expand Down
3 changes: 1 addition & 2 deletions source/paths/AcademicSessionProgrammeOfferingCollection.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ get:
- $ref: '../parameters/pageNumber.yaml'
- $ref: '../parameters/consumer.yaml'
- $ref: '../parameters/filterQuery.yaml'
- $ref: '../parameters/filterQueryOr.yaml'
- $ref: '../parameters/fields.yaml'
- $ref: '../parameters/search.yaml'
- $ref: '../parameters/teachingLanguage.yaml'
Expand Down Expand Up @@ -45,7 +44,7 @@ get:
'200':
description: OK
content:
application/json:
application/vnd.oeapi+json:
schema:
allOf:
- $ref: '../schemas/Pagination.yaml'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ get:
- $ref: '../parameters/pageNumber.yaml'
- $ref: '../parameters/consumer.yaml'
- $ref: '../parameters/filterQuery.yaml'
- $ref: '../parameters/filterQueryOr.yaml'
- $ref: '../parameters/fields.yaml'
- $ref: '../parameters/search.yaml'
- $ref: '../parameters/teachingLanguage.yaml'
Expand Down Expand Up @@ -45,7 +44,7 @@ get:
'200':
description: OK
content:
application/json:
application/vnd.oeapi+json:
schema:
allOf:
- $ref: '../schemas/Pagination.yaml'
Expand Down
3 changes: 1 addition & 2 deletions source/paths/BuildingCollection.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,13 @@ get:
- $ref: '../parameters/pageNumber.yaml'
- $ref: '../parameters/consumer.yaml'
- $ref: '../parameters/filterQuery.yaml'
- $ref: '../parameters/filterQueryOr.yaml'
- $ref: '../parameters/fields.yaml'
- $ref: '../parameters/search.yaml'
responses:
'200':
description: OK
content:
application/json:
application/vnd.oeapi+json:
schema:
allOf:
- $ref: '../schemas/Pagination.yaml'
Expand Down
2 changes: 1 addition & 1 deletion source/paths/BuildingInstance.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ get:
'200':
description: OK
content:
application/json:
application/vnd.oeapi+json:
schema:
$ref: '../schemas/Building.yaml'
'400':
Expand Down
3 changes: 1 addition & 2 deletions source/paths/BuildingRoomCollection.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ get:
- $ref: '../parameters/pageNumber.yaml'
- $ref: '../parameters/consumer.yaml'
- $ref: '../parameters/filterQuery.yaml'
- $ref: '../parameters/filterQueryOr.yaml'
- $ref: '../parameters/fields.yaml'
- $ref: '../parameters/search.yaml'
- name: buildingId
Expand All @@ -29,7 +28,7 @@ get:
'200':
description: OK
content:
application/json:
application/vnd.oeapi+json:
schema:
allOf:
- $ref: '../schemas/Pagination.yaml'
Expand Down
Loading