Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Titel

Education API

Status

Status
titleIn ontwikkeling
Status
titleROSA-Architectuurscan
Status
colourBlue
titleBEsluitvorming
Status
colourYellow
titleimplementatie
Status
titlein beheer

Versie

Documentatie: 0.09.92

schemaVersion: 0.09.82

Datum

20 Juni 15 Oktober 2024

Auteurs

Architectenraad Edu-V

Acties

  • Review en doorontwikkeling op basis van input LAS leveranciers

De Education API wordt gebruikt om informatie over aangeboden opleidingen en vakken uit het Administratiesysteem onderwijsdeelnemer te delen in het Afsprakenstelsel Edu-V. Deze API wordt aangeboden als onderdeel van de gegevensdienst Onderwijsaanbod met het Administratiesysteem onderwijsdeelnemer als Bron.

Tip

Scope: werkingsgebieden funderend onderwijs en vavo

De afspraken met betrekking tot de gegevensdiensten uit de administratiesystemen zijn van toepassing op de werkingsgebieden:

  • Primair onderwijs

  • Gespecialiseerd onderwijs

  • Voortgezet onderwijs

  • Voortgezet algemeen volwassenenonderwijs (vavo)

De gegevensdiensten zijn niet ontwikkeld voor het middelbaar beroepsonderwijs. In het middelbaar beroepsonderwijs wordt gebruik gemaakt van OOAPI.

De technische specificatie bestaat uit:

...

Gegevensdienst

Onderwijsaanbod

Scopes

  • eduv.education

Objecten

Bron

Administratiesysteem onderwijsdeelnemer

Afnemer

  • Selectieomgeving leermiddelen

  • Bestelomgeving leermiddelen

  • Aanspraakmanager

  • Leermiddelenportaal

  • Onderwijsleeromgeving

  • Leermiddelendashboard

  • Identiteitsbeheervoorziening

Endpoints

Administratiesysteem onderwijsdeelnemer

  • GET Organisation

  • GET Organisations

  • GET StudyOffering

  • GET StudyOfferings for School

  • GET SubjectOffering

  • GET SubjectOfferings for School

Notifications

De Notifications API kan gebruikt worden om als afnemer een notificatie te ontvangen bij een wijziging in de stand (nieuw/gewijzigd/verwijderd). Hiervoor dient zowel de bron als de afnemer dan de Berichteninfrastructuur en de Notifications API te hebben geïmplementeerd.

...

*Veld

Type

Format

Omschrijving

Voorbeeld

O/V

Vullingsregel

studyOfferingId

string

uuid

Een unieke identifier voor het object

V

studyOfferingName

string

string

De naam die de onderwijsaanbieder heeft gegeven aan deze AangebodenOpleiding.

Gymnasium brugklas

V

studyName

string

string

De opleidingseenheid korte naam erkende opleiding die van toepassing is op deze AangebodenOpleiding.

vwo-gymnasium-onderbouw

basisonderwijs

V*

Indien de AangebodenOpleiding erkend is dan is dit veld verplicht.

Werkingsregel is om per sector de volgende waardelijsten te gebruiken:

  • Primair onderwijs: po-opleidingseenheden korte naam conform erkende opleiding in waardelijst RIO po

  • Voortgezet onderwijs: vo-opleidingseenheden korte naam conform erkende opleiding in waardelijst RIO vo

studyCode

string

string

De erkendeopleidingscode opleidingseenheidcode (po en vo) van de AangebodenOpleiding,

02001002O0222

1000O0001

V*

Indien de AangebodenOpleiding erkend is dan is dit veld verplicht.

Werkingsregel is om per sector de volgende waardelijsten te gebruiken:

studyCharacteristics

array

string

De opleidingskenmerken van deze AangebodenOpleiding.

Begaafdheidsprofiel

MontessoriVERRIJKT_PROGRAMMA_VWO

PILOT_TPO

CULTUURPROFIEL_PO

HBGO

O

Werkingsregel is om per sector de volgende waardelijsten te gebruiken:

studyLevel

object

StudyLevel

Het onderwijsniveau van deze AangebodenOpleiding.

Zie StudyLevel object

O

Formaat conform het Niveau van SLO. Voor meer informatie zie Waardelijst onderwijsniveaus en leerjaren.

studyYear

integer

integer

Het opleidingsjaar van deze AangebodenOpleiding

1

O

Dit attribuut specificeert het jaar van de opleiding. Bijvoorbeeld:

  • Basisonderwijs: 0, 1, 2, 3, 4, 5, 6, 7 of 8

  • VMBO: 0, 1, 2, 3 of 4

  • HAVO: 0, 1, 2, 3, 4 of 5

  • VWO: 0, 1, 2, 3, 4, 5 of 6

Het gespecialiseerd onderwijs kan optioneel gebruik maken van dit attribuut. Uit het studyLevel valt op te maken dat de opleiding van het niveau speciaal onderwijs of voortgezet speciaal onderwijs is.

status

string

ENUM

De status van dit object.

active
tobedeleted

V

De status is een verplicht veld en geef aan of het object al dan niet verwijderd kan worden.

dateCreated

string

datetime

Datum en tijdstip waarop de entiteit is aangemaakt

2017-07-21T17:32:28Z

V

dateLastModified

string

datetime

Tijdstempel waarop één of meerdere van de hierboven genoemde attributen het laatst zijn gewijzigd

2022-08-11T15:31:12Z

V

...

Open api
filternone
supportedSubmitMethodsnone
showDownloadButtontrue
openapi: 3.0.0
info:
  title: Education API
  version: '0.09.82'
  description: |-
    The Education API is implemented by the `Administratiesysteem onderwijsdeelnemer`.
    
    The Education API has the following objects:
    - Organisation: school organisations
    - StudyOffering: the study units including the study year offered by a school
    - SubjectOffering: the subjects offered by a school
    
    These objects could be considered open data from the school. As a data owner, the school authorizes the exchange of this information towards suppliers.
    A possible implementation for an `Administratiesysteem onderwijsdeelnemer` is to offer an `open data` option to the school.
    This option means that a reference component that is allowed to consume the Education API to request data without the consent mechanism.

    The Education API has a scope of primary and secondary education. Vocational education is out of scope. For Vocational Education we advice to use the [Open Education API (OOAPI)](https://openonderwijsapi.nl/).
  contact:
    name: Edu-V
    url: www.edu-v.org/afsprakenstelsel
    email: info@edu-v.org
components:
  schemas:
  
    schemaVersion:
      type: string
      description: |
        Schema version of this API using semantic versioning 2.0.0.
        The API version number is communicated in the header.
        The major version is communicated in the URI.
        For more information see the [Edu-V versioning guidelines](https://edu-v.atlassian.net/wiki/spaces/AFSPRAKENS/pages/9437200/Versiebeheer).
      default: 0.09.92
          
    Organisation:
      title: Organisation
      description: 'The Organisation object with its identifiers, name, board and locations information.'
      type: object
      x-tags:
        - Organisation
      properties:
        organisationMasterIdentifier:
          type: string
          description: |
            The primary identifier for a School. For Schools the `OnderwijsaanbiederId` is used.
            (either organisationMasterIdentifier or organisationIds is required)
          example: '104A158' # De Mariënborn
        organisationIds:
          type: array
          description: |
            A secondary identifier for the School. This value is used whenever the primary identifier is not available.
            (either organisationMasterIdentifier or organisationIds is required)
          items:
            type: object
            properties:
              organisationId:
                type: string
              organisationIdType:
                type: string
                enum:
                  - OIE_CODE # Onderwijsinstellingserkenningcode e.g. 09QQ (Marienbornschool)
                  - VEBP_CODEID # Vestigingserkenningcode e.g. 09QQ00 (Marienbornschool)
                  - BP_ID # Basispoort gegenereerde identifier voor Basispoort gegenereerde identifier voor de school.
                  - DD_ID # Door de Centrale Registratie van Edu-iX gegenereerde DigiDeliveryId van de school.
                  - AS_ID # Door het Leerlingadministratiesysteem gegenereerde identifier van de school.
            required:
              - organisationId
              - organisationIdType
        name:
          type: string
          description: 'The name of the School.'
        boards:
          description: 'The Boards this School belongs to.'
          type: array
          items:
            $ref: '#/components/schemas/BoardReference'
        locations:
          type: array
          description: 'A list of all school locations of this organisation.'
          items:
            $ref: '#/components/schemas/LocationReference'
        sourceId:
          type: string
          format: uuid
          description: |
            The Source Identifier of the object. This is a GUID System ID for an object.
            This is the GUID that Consumers will refer to when making API calls, or when needing to identify an object.
            It is RECOMMENDED that systems are able to map whichever local ids (e.g. database key fields), userMasterIdentifier or userIds they use to SourceId.
            The sourcedId of an object is considered an addressable property of an entity and as such will not be treated as Personally Identifiable Information (PII).
            
            The sourceId attribute is based on the [Base Class from OneRoster](https://www.imsglobal.org/sites/default/files/spec/oneroster/v1p2/rostering-informationmodel/OneRosterv1p2RosteringService_InfoModelv1p0.html#Data_Base).
        status:
          description: |
            The status field gives an indication to Consumers about the status of an object.
            Consumers can delete objects that are flagged `tobedeleted`  as such if they wish.

            The status attribute is based on the [Base Class from OneRoster](https://www.imsglobal.org/sites/default/files/spec/oneroster/v1p2/rostering-informationmodel/OneRosterv1p2RosteringService_InfoModelv1p0.html#Data_Base).
          type: string
          enum:
            - active
            - tobedeleted
        dateCreated:
          type: string
          description: 'Indicates the date and time the object was first created. Format: Conform openapi in ZULU time zoals gespecificeerd in RFC 3339, section 5.6.'
          format: date-time
          example: "2017-07-21T17:32:28Z"
        dateLastModified:
          type: string
          description: 'Indicates the date and time the object was last modified. Format: Conform openapi in ZULU time zoals gespecificeerd in RFC 3339, section 5.6.'
          format: date-time
          example: "2022-08-11T15:31:12Z"
      required:
        - name
        - status
        - sourceId
        - dateCreated
        - dateLastModified

    StudyOffering:
      title: StudyOffering
      description: 'The StudyOffering object with its identifiers, name, and metadata information.'
      type: object
      x-tags:
        - StudyOffering
      properties:
        studyOfferingId:
          type: string
          format: uuid
          description: |
            A unique identifier for this StudyOffering object.
            This is the GUID that Consumers will refer to when making API calls, or when needing to identify an object.
        studyOfferingName:
          type: string
          description: 'The name given by the School for this StudyOffering.'
        studyName:
          type: string
          description: |
            Offical name of the study.
            - primary education: the `po-opleidingseenheden in RIO korte naam` name as specified in [Waardenlijst Opleidingseenheden po](https://www.edustandaard.nl/standaard_werkgroepen/beheergroep-waardenlijsten-rio/) is used.
            - secondary education: the `vo-opleidingseenheden in RIO korte naam` name as specified in [Waardenlijst Opleidingseenheden vo](https://www.edustandaard.nl/standaard_werkgroepen/beheergroep-waardenlijsten-rio/) is used.              
        studyCode:
          type: string
          description: |
            Offical code of the study.
            - primary education: the `erkendeopleidingscode``opleidingseenheidcode` as specified in [Waardenlijst Opleidingseenheden po](https://www.edustandaard.nl/standaard_werkgroepen/beheergroep-waardenlijsten-rio/) is used.
            - secondary education: the `erkendeopleidingscode``opleidingseenheidcode` as specified in [Waardenlijst Opleidingseenheden vo](https://www.edustandaard.nl/standaard_werkgroepen/beheergroep-waardenlijsten-rio/) is used.
        studyCharacterstics:
          type: array
          description: |
            Offical characteristic of the study.
            - primary education: the `po-opleidingskenmerken` name as specified in [Waardenlijst Opleidingseenheden po](https://www.edustandaard.nl/standaard_werkgroepen/beheergroep-waardenlijsten-rio/) is used.
            - secondary education: the `vo-opleidingskenmerken` name as specified in [Waardenlijst Opleidingseenheden vo](https://www.edustandaard.nl/standaard_werkgroepen/beheergroep-waardenlijsten-rio/) is used.              
          items:
            type: string
        studyLevel:
          type: object
          description: |
            Official level of the study.
            Primary and secondary education studyLevels are based on the `Niveau` as specified in [SLO curriculum](https://opendata.slo.nl/curriculum/2023/api/v1/niveau/)
          properties:
            studyLevelId:
              type: string
              description: 'The uuid of the level.'
              example: 'cb61531d-61eb-4412-a52f-ca065ca37e39/'
              pattern: '^[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}$'
            studyLevelPrefix:
              type: string
              description: 'The prefix of the level'
              example: 4205
              minLength: 4
              maxLength: 4
              pattern: "^[0-9]*$"
            studyLevelName:
              type: string
              description: 'The name of the level.'
              example: 'havo 5'
          required:
            - studyLevelId
            - studyLevelPrefix
            - studyLevelName
        studyYear:
          type: integer
          description: |
              The study year of this object.
              
              Example values are:
              - Basisschool: 0, 1, 2, 3, 4, 5, 6, 7 or 8
              - VMBO: 0, 1, 2, 3 or 4
              - HAVO: 0, 1, 2, 3, 4 or 5
              - VWO: 0, 1, 2, 3, 4, 6 or 6
        status:
          description: |
            The status field gives an indication to Consumers about the status of an object.
            Consumers can delete objects that are flagged `tobedeleted`  as such if they wish.

            The status attribute is based on the [Base Class from OneRoster](https://www.imsglobal.org/sites/default/files/spec/oneroster/v1p2/rostering-informationmodel/OneRosterv1p2RosteringService_InfoModelv1p0.html#Data_Base).
          type: string
          enum:
            - active
            - tobedeleted
        dateCreated:
          type: string
          description: 'Indicates the date and time the object was first created. Format: Conform openapi in ZULU time zoals gespecificeerd in RFC 3339, section 5.6.'
          format: date-time
          example: "2017-07-21T17:32:28Z"
        dateLastModified:
          type: string
          description: 'Indicates the date and time the object was last modified. Format: Conform openapi in ZULU time zoals gespecificeerd in RFC 3339, section 5.6.'
          format: date-time
          example: "2022-08-11T15:31:12Z"
      required:
        - studyOfferingId
        - studyOfferingName
        - status
        - dateCreated
        - dateLastModified

    SubjectOffering:
      title: SubjectOffering
      description: 'The SubjectOffering object with its identifiers, name, and metadata information.'
      type: object
      x-tags:
        - SubjectOffering
      properties:
        subjectOfferingId:
          type: string
          format: uuid
          description: |
            A unique identifier for this SubjectOffering object.
            This is the GUID that Consumers will refer to when making API calls, or when needing to identify an object.
        subjectOfferingName:
          type: string
          description: 'The name given by the School to this SubjectOffering.'
        subjectOfferingAbbr:
          type: string
          description: 'Abbreviation of the SubjectOffering name.'
        subjectCode:
          type: string
          description: |
            Offical code of the subject.
            - primary education: the `vakcode` as specified in [Waardenlijst Vakken po](https://www.edustandaard.nl/standaard_werkgroepen/beheergroep-waardenlijsten-rio/) is used.
            - secondary education: the `vakcode` as specified in [Waardenlijst Vakken vo](https://www.edustandaard.nl/standaard_werkgroepen/beheergroep-waardenlijsten-rio/) is used.

            Note: The value list is not yet available. As Edu-V we are working on a standardized list of subject codes in cooperation with the Edustandaard working committee.
        studyOfferings:
          type: array
          items:
            type: string
            description: 'Reference to a studyOfferingId of the StudyOffering object where this SubjectOffering is part of.'
        status:
          description: |
            The status field gives an indication to Consumers about the status of an object.
            Consumers can delete objects that are flagged `tobedeleted`  as such if they wish.

            The status attribute is based on the [Base Class from OneRoster](https://www.imsglobal.org/sites/default/files/spec/oneroster/v1p2/rostering-informationmodel/OneRosterv1p2RosteringService_InfoModelv1p0.html#Data_Base).
          type: string
          enum:
            - active
            - tobedeleted
        dateCreated:
          type: string
          description: 'Indicates the date and time the object was first created. Format: Conform openapi in ZULU time zoals gespecificeerd in RFC 3339, section 5.6.'
          format: date-time
          example: "2017-07-21T17:32:28Z"
        dateLastModified:
          type: string
          description: 'Indicates the date and time the object was last modified. Format: Conform openapi in ZULU time zoals gespecificeerd in RFC 3339, section 5.6.'
          format: date-time
          example: "2022-08-11T15:31:12Z"
      required:
        - subjectOfferingId
        - subjectOfferingName
        - status
        - dateCreated
        - dateLastModified

    SchoolReference:
      type: object
      title: SchoolReference
      description: 'A reference to a School organisation.'
      properties:
        organisationMasterIdentifier:
          type: string
          description: |
            The primary identifier for a School. For Schools the `OnderwijsaanbiederId` is used.
            (either organisationMasterIdentifier or organisationIds is required)
          example: '104A158' # De Mariënborn
        organisationIds:
          type: array
          description: |
            A secondary identifier for the School. This value is used whenever the primary identifier is not available.
            (either organisationMasterIdentifier or organisationIds is required)
          items:
            type: object
            properties:
              organisationId:
                type: string
              organisationIdType:
                type: string
                enum:
                  - OIE_CODE # Onderwijsinstellingserkenningcode e.g. 09QQ (Marienbornschool)
                  - VE_CODE # Vestigingserkenningcode e.g. 09QQ00 (Marienbornschool)
                  - BP_ID # Basispoort gegenereerde identifier voor de school.
                  - DD_ID # Door de Centrale Registratie van Edu-iX gegenereerde DigiDeliveryId van de school.
                  - AS_ID # Door het Leerlingadministratiesysteem gegenereerde identifier van de school.
            required:
              - organisationId
              - organisationIdType

    BoardReference:
      type: object
      title: BoardReference
      description: 'A reference to a School Board organisation.'
      properties:
        organisationMasterIdentifier:
          type: string
          description: |
            The primary identifier for a School Board. For Schools the `OnderwijsbestuurId` is used.
            (either organisationMasterIdentifier or organisationIds is required)
          example: '106B996' # Stichting Flores Onderwijs
        organisationIds:
          type: array
          description: |
            A secondary identifier for the School Board. This value is used whenever the primary identifier is not available.
            (either organisationMasterIdentifier or organisationIds is required)
          items:
            type: object
            properties:
              organisationId:
                type: string
              organisationIdType:
                type: string
                enum:
                  - BGE_CODE # Bevoegd gezag erkenningscode e.g. 41645 (Stichting Flores Onderwijs)
            required:
              - organisationId
              - organisationIdType
        name:
          type: string
          description: 'The name of the School Board.'
          example: 'Stichting Flores Onderwijs'
      required:
        - name

    LocationReference:
      title: LocationReference
      description: 'A reference to a School location.'
      type: object
      x-tags:
        - Organisation
      properties:
        locationMasterIdentifier:
          type: string
          description: |
            The primary identifier for the School location. For School locations the `Onderwijslocatiecode` is used.
            (either organisationMasterIdentifier or organisationIds is required)
          example: '112X995' # De Mariënborn
        locationIds:
          type: array
          description: |
            A secondary identifier for the School location. This value is used whenever the primary identifier is not available.
            (either organisationMasterIdentifier or organisationIds is required)
          items:
            type: object
            properties:
              locationId:
                type: string
              locationIdType:
                type: string
                enum:
                  - VE_CODE # Vestigingserkenningscode e.g. 09QQ00 (Marienbornschool)
            required:
              - locationId
              - locationIdType
        name:
          type: string
          description: 'The name of the School location.'
      required:
        - name

    StatusResponse:
      title: StatusResponse
      type: object
      description: 'Functional status code and status message.'
      properties:
        status:
          type: integer
          description: 'See functional status codes within the Documentation.'
        statusMessage:
          type: string
          description: 'See functional status messages within the Documentation.'
      required:
        - status
  
  securitySchemes:
    OAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://api.example.com/oauth2/token
          refreshUrl: https://api.example.com/oauth2/token
          scopes:
            eduv.education: 'a scope that gives access to all objects from the Education API.'
            
paths:
  
  /organisations/{id}:
    parameters:
      - schema:
          type: string
        name: id
        in: path
        required: true
        description: 'Reference to the sourceId of the Organisation object.'
    get:
      summary: 'Get Organisation'
      x-tags:
        - Organisation
      tags:
        - Administratiesysteem onderwijsdeelnemer
      operationId: get-organisation
      description: |
        Request an Organisation object based on its sourceId.
        The Source Identifier is the GUID System ID for an object. This is the GUID that Consumers will refer to when making API calls.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Organisation'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
      security:
        - OAuth2:
            - eduv.education

  /organisations:
    parameters:
      - schema:
          type: string
        name: orgMasterId
        in: query
        required: false
        description: |
          The organisationMasterIdentifier of the school.
          This parameter is used when the primary identifier for a school (being the `OnderwijsaanbiederId`) is available.
      - schema:
          type: string
        name: orgId
        in: query
        required: false
        description: |
          The organisationIdentifier (secondary identifier) of the school.
          This parameter is used in combination with the orgIdType when the organisationMasterIdentifier is not available.
      - schema:
          type: string
          example: DD_ID
          enum:
            - OIE_CODE
            - VE_CODE
            - BP_ID
            - DD_ID
            - AS_ID
        name: orgIdType
        in: query
        required: false
        description: |
          The type of the organisationIdentifier.
          This parameter is used in combination with the orgId when the organisationMasterIdentifier is not available.
      - schema:
          type: string
        name: boardMasterId
        in: query
        required: false
        description: |
          The organisationMasterIdentifier of the Board.
          This parameter is used when the primary identifier for a board (being the `OnderwijsbestuurId`) is available.
      - schema:
          type: string
        name: boardId
        in: query
        required: false
        description: |
          The boardIdentifier (secondary identifier) of a board.
          This parameter is used in combination with the boardIdType when the boardMasterIdentifier is not available.
      - schema:
          type: string
          example: DD_ID
          enum:
            - BGE_CODE
        name: boardIdType
        in: query
        required: false
        description: |
          The type of the boardIdentifier.
          This parameter is used in combination with the boardId when the boardMasterIdentifier is not available.
      - schema:
          type: string
        name: name
        in: query
        required: false
        description: |
          The name of the school.
    get:
      summary: 'Get Organisations'
      x-tags:
        - Organisation
      tags:
        - Administratiesysteem onderwijsdeelnemer
      operationId: get-organisations-by-school-search
      description: |
        Request all registered Organisation objects based on the specified School.
        This endpoint can be used to gather all relevant organisations within the `Administratiesysteem onderwijsdeelnemer` for the specified school of board.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Organisation'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
      security:
        - OAuth2:
            - eduv.education

  /studyofferings/school/{id}:
    parameters:
      - schema:
          type: string
        name: id
        in: path
        required: true
        description: 'Reference to the studyOfferingId of the StudyOffering object.'
      - schema:
          type: string
        name: orgMasterId
        in: query
        required: false
        description: |
          The organisationMasterIdentifier of the school.
          This parameter is used when the primary identifier for a school (being the `OnderwijsaanbiederId`) is available.
      - schema:
          type: string
        name: orgId
        in: query
        required: false
        description: |
          The organisationIdentifier (secondary identifier) of the school.
          This parameter is used in combination with the orgIdType when the organisationMasterIdentifier is not available.
      - schema:
          type: string
          example: DD_ID
          enum:
            - OIE_CODE
            - VE_CODE
            - BP_ID
            - DD_ID
            - AS_ID
        name: orgIdType
        in: query
        required: false
        description: |
          The type of the organisationIdentifier.
          This parameter is used in combination with the orgId when the organisationMasterIdentifier is not available.
    get:
      summary: 'Get StudyOffering'
      x-tags:
        - StudyOffering
      tags:
        - Administratiesysteem onderwijsdeelnemer
      operationId: get-studyofferings
      description: 'Request StudyOffering object based on its studyOfferingId.'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StudyOffering'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
      security:
        - OAuth2:
            - eduv.education

  /studyofferings/school:
    parameters:
      - schema:
          type: string
        name: orgMasterId
        in: query
        required: false
        description: |
          The organisationMasterIdentifier of the school.
          This parameter is used when the primary identifier for a school (being the `OnderwijsaanbiederId`) is available.
      - schema:
          type: string
        name: orgId
        in: query
        required: false
        description: |
          The organisationIdentifier (secondary identifier) of the school.
          This parameter is used in combination with the orgIdType when the organisationMasterIdentifier is not available.
      - schema:
          type: string
          example: DD_ID
          enum:
            - OIE_CODE
            - VEBP_CODEID
            - BP_ID
            - DDDD_ID
            - AS_ID
        name: orgIdType
        in: query
        required: false
        description: |
          The type of the organisationIdentifier.
          This parameter is used in combination with the orgId when the organisationMasterIdentifier is not available.
      - schema:
          type: string
        name: studyCode
        in: query
        required: false
        description: 'Optional filter to request all StudyOffering objects of a specified studyCode.'
      - schema:
          type: integerstring
          nameformat: startdate-time
        in: query
        descriptionname: 'Startsince
point for pagination of results, defaults to 0,' required: false
      examples:  description: 'Request all objects modified after the specified timestamp. defaultFormat: Conform openapi in ZULU time as specified in RFC 3339, section 5.6'
value: 0       example: "2017-07-21T17:32:28Z"
    summaryget:
The start point for pagination  summary: Get StudyOfferings for School
- schema:     x-tags:
     type: integer  - StudyOffering
       maximumtags:
100        - name:Administratiesysteem limitonderwijsdeelnemer
        inoperationId: query
 get-studyofferings-for-school
      description: 'LimitRequest ofStudyOffering numberobjects offor resultsa returnedspecified bySchool.'
page, defaults to 20 with max 100.'responses:
        examples'200':
          defaultdescription: OK
           valuecontent:
20            application/json:
summary: The default value if none is provided       schema:
   max:             valuetype: 100array
             summary: The largest recommendeditems:
page size       - schema:         $ref:  type: string'#/components/schemas/StudyOffering'
        '400':
   format: date-time      description: Bad Request
in: query         namecontent:
since         required: false  application/json:
      description: 'Request all objects modified after the specified timestamp. Formatschema:
Conform openapi in ZULU time as specified in RFC 3339, section 5.6'         example: "2017-07-21T17:32:28Z"$ref: '#/components/schemas/StatusResponse'
    get:       summary'401':
Get StudyOfferings for School       x-tagsdescription: Unauthorized
       - StudyOffering  content:
    tags:        application/json:
- Administratiesysteem onderwijsdeelnemer       operationId: get-studyofferings-for-school    schema:
  description: 'Request StudyOffering objects for a specified School.'       responses$ref: '#/components/schemas/StatusResponse'
        '200403':
          description: OKForbidden
          content:
            application/json:
              schema:
                type$ref: array'#/components/schemas/StatusResponse'
        '404':
       items:   description: Not Found
          content:
  $ref: '#/components/schemas/StudyOffering'         '400'application/json:
          description: Bad Request  schema:
        content:        $ref: '#/components/schemas/StatusResponse'
   application/json:   security:
        -   schemaOAuth2:
            - eduv.education

 $ref: '#/componentssubjectofferings/schemas/StatusResponse'
school/{id}:
    parameters:
      - '401'schema:
          descriptiontype: Unauthorizedstring
        name: id
content:        in: path
   application/json:     required: true
        schemadescription: 'Reference to the subjectOfferingId of the SubjectOffering object.'
      - schema:
$ref: '#/components/schemas/StatusResponse'         '403'type: string
         descriptionname: ForbiddenorgMasterId
        in: query
content:        required: false
   application/json:     description: |
        schema:  The organisationMasterIdentifier of the school.
          $ref: '#/components/schemas/StatusResponse'
        '404':
    This parameter is used when the primary identifier for a school (being the `OnderwijsaanbiederId`) is available.
     description: Not- Foundschema:
          contenttype: string
           application/jsonname: orgId
        in: query
   schema:     required: false
        description: |
$ref: '#/components/schemas/StatusResponse'       security:  The organisationIdentifier (secondary identifier) of the school.
- OAuth2:         This parameter is used -in educationcombination with the  /subjectofferings/school/{id}:
    parameters:orgIdType when the organisationMasterIdentifier is not available.
      - schema:
          type: string
        name  example: idDD_ID
          inenum:
 path         required: true - OIE_CODE
      description: 'Reference to the subjectOfferingId of the SubjectOffering object.'      - BP_ID
            - schema:DD_ID
            type: string- AS_ID
        name: orgMasterIdorgIdType
        in: query
        required: false
        description: |
          The organisationMasterIdentifiertype of the schoolorganisationIdentifier.
          This parameter is used whenin thecombination primarywith identifierthe fororgId a school (being when the `OnderwijsaanbiederId`)organisationMasterIdentifier is not available.
    get:
     - schemasummary: 'Get SubjectOffering'
      x-tags:
 type: string      - SubjectOffering
 name: orgId    tags:
    in: query   - Administratiesysteem onderwijsdeelnemer
    required: false operationId: get-subjectoffering
      description: |'Request SubjectOffering object based on its subjectOfferingId.'
    The organisationIdentifier (secondaryresponses:
identifier) of the school.     '200':
     This parameter is used in combinationdescription: withOK
the orgIdType when the organisationMasterIdentifier is not available.   content:
   - schema:        application/json:
  type: string           exampleschema:
DD_ID           enum:     $ref: '#/components/schemas/SubjectOffering'
      - OIE_CODE
 '400':
          description: -Bad VE_CODERequest
          content:
 - BP_ID          application/json:
  - DD_ID           schema:
 - AS_ID         name: orgIdType    $ref: '#/components/schemas/StatusResponse'
   in: query    '401':
    required: false     description: Unauthorized
  description: |       content:
   The type of the organisationIdentifier.     application/json:
     This parameter is used in combination with the orgId whenschema:
the organisationMasterIdentifier is not available.     get:       summary$ref: 'Get SubjectOffering'#/components/schemas/StatusResponse'
        x-tags:'403':
          - SubjectOfferingdescription: Forbidden
          tagscontent:
        -   Administratiesysteem onderwijsdeelnemerapplication/json:
      operationId: get-subjectoffering       descriptionschema:
 'Request   SubjectOffering object based on its subjectOfferingId.'       responses$ref: '#/components/schemas/StatusResponse'
        '200404':
          description: OKNot Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubjectOfferingStatusResponse'
      security:
   '400':     - OAuth2:
    description: Bad Request      - eduv.education

  content/subjectofferings/school:
    parameters:
      - application/jsonschema:
          type: string
  schema:      name: orgMasterId
         $refin: '#/components/schemas/StatusResponse'query
        '401'required:  false
        description: Unauthorized|
          content:The organisationMasterIdentifier of the school.
        application/json:
              schema:   This parameter is used when the primary identifier for a school (being the `OnderwijsaanbiederId`) is available.
      - schema:
         $ref type: '#/components/schemas/StatusResponse'string
        '403'name: orgId
        in: description:query
Forbidden        required: false
 content:       description: |
       application/json:   The organisationIdentifier (secondary identifier) of the school.
     schema:     This parameter is used in combination with the orgIdType when the organisationMasterIdentifier $ref: '#/components/schemas/StatusResponse'
is not available.
      - '404'schema:
          descriptiontype: Notstring
Found           contentexample: DD_ID
           application/jsonenum:
            - OIE_CODE
schema:                 $ref: '#/components/schemas/StatusResponse'
      security:
        - OAuth2:- BP_ID
            - education
DD_ID
  /subjectofferings/school:     parameters:
      - schema:AS_ID
          type: string
        name: orgMasterIdorgIdType
        in: query
        required: false
        description: |
          The organisationMasterIdentifiertype of the schoolorganisationIdentifier.
          This parameter is used whenin thecombination primarywith identifierthe fororgId awhen school (being the `OnderwijsaanbiederId`)organisationMasterIdentifier is not available.
      - schema:
          type: string
        name: orgIdsubjectCode
        in: query
        required: false
        description: |'Optional filter to request all SubjectOffering objects of a specified subjectCode.'
The organisationIdentifier (secondary identifier) of the school.- schema:
         This parametertype: isstring
used in combination with the orgIdType when the organisationMasterIdentifiername: isstudyOfferingId
not available.       - schemain: query
         typerequired: stringfalse
        description: 'Optional example: DD_ID
          enum:
filter to request all SubjectOffering objects offered within a Study and its corresponding studyOfferingId.'
      - schema:
   - OIE_CODE      type: string
     - VE_CODE    format: date-time
       - BP_IDin: query
        name: since
 - DD_ID      required: false
     - AS_ID  description: 'Request all objects modified after the name:specified orgIdTypetimestamp. Format: Conform openapi in ZULU time as specified in: queryRFC 3339, section 5.6'
     required: false  example: "2017-07-21T17:32:28Z"
     descriptionget:
|      summary: Get SubjectOfferings for School
    The type ofx-tags:
the organisationIdentifier.       - SubjectOffering
  This parameter is used intags:
combination with the orgId when the organisationMasterIdentifier is not- available.Administratiesysteem onderwijsdeelnemer
     - schemaoperationId: get-subjectofferings-for-school
      description: 'Request SubjectOffering type:objects stringfor a specified School.'
     name responses:
subjectCode        '200':
in: query         requireddescription: falseOK
        description: 'Optional filtercontent:
to request all SubjectOffering objects of a specified subjectCode.'    application/json:
  - schema:           typeschema:
string         name: studyOfferingId      type: array
 in: query         required: false    items:
    description: 'Optional filter to request all SubjectOffering objects offered within a Study and its corresponding studyOfferingId.'$ref: '#/components/schemas/SubjectOffering'
       - schema'400':
          typedescription: Bad Request
integer          namecontent:
start            inapplication/json:
query         description: 'Start point for pagination ofschema:
results, defaults to 0,'         examples:    $ref: '#/components/schemas/StatusResponse'
     default:   '401':
          valuedescription: 0Unauthorized
            summarycontent:
The start point for pagination       - schemaapplication/json:
          type: integer    schema:
      maximum: 100         name$ref: limit'#/components/schemas/StatusResponse'
        in'403':
 query         description: 'LimitForbidden
of number of results returned by page, defaults to 20 withcontent:
max 100.'         examples:  application/json:
        default:      schema:
      value: 20         $ref: '#/components/schemas/StatusResponse'
  summary: The default value if none is'404':
provided           maxdescription: Not Found
          valuecontent:
100            application/json:
 summary: The largest recommended page size       - schema:
          type: string           format: date-time$ref: '#/components/schemas/StatusResponse'
        insecurity:
query        - nameOAuth2:
since         required: false  - eduv.education

x-tags:
  - descriptionname: 'RequestOrganisation
all objects modified after the specified timestamp. Format- name: ConformStudyOffering
openapi in ZULU- time as specified in RFC 3339, section 5.6'
        example: "2017-07-21T17:32:28Z"
    get:
      summary: Get SubjectOfferings for School
      x-tags:
        - SubjectOffering
      tags:
        - Administratiesysteem onderwijsdeelnemer
      operationId: get-subjectofferings-for-school
      description: 'Request SubjectOffering objects for a specified School.'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SubjectOffering'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
      security:
        - OAuth2:
            - education

x-tags:
  - name: Organisation
  - name: StudyOffering
  - name: SubjectOffering

Release notes

0.0.1: De Rostering API was voorheen een onderdeel van de SIS API. Hierin waren de volgende wijzingen gedaan:

...

0.0.1: Eerste draft van de API.

...

0.0.2: Objecten en YAML files zijn toegevoegd t.b.v. de 80 procent specificatie.

0.0.3: De technische specificatie is verder uitgewerkt. Ook is de feedback uit de werkgroepen verwerkt in een volgende versie:

...

name: SubjectOffering

...

Release notes

  • 0.0.1: De Rostering API was voorheen een onderdeel van de SIS API. Hierin waren de volgende wijzingen gedaan:

    • 0.0.1: Eerste draft van de API.

    • 0.0.2: Objecten en YAML files zijn toegevoegd t.b.v. de 80 procent specificatie.

    • 0.0.3: De technische specificatie is verder uitgewerkt. Ook is de feedback uit de werkgroepen verwerkt in een volgende versie:

      • GET all endpoints zijn toegevoegd voor alle objecten.

      • Query parameter edu_org_id is toegevoegd aan alle endpoints als implementatie van regie op gegevens en de M2M identificatie en authenticatie.

      • Object Teacher is hernoemd naar Employee inclusief het attribuut role. In dezelfde lijn is ook teacherReference hernoemd naar employeeReference

      • De waardelijst studyYear is verduidelijkt.

      • Het attribuut class van de Student is een separaat object geworden inclusief employees.

      • De status- en foutcodes zijn toegevoegd aan de documentatie en de YAML.

      • In de YAML is aangegeven welke referentiecomponent de endpoints aanbiedt als Producer.

      • De YAML is geactualiseerd op basis van de bovenstaande wijzigingen.

    • 0.0.4: Objecten geactualiseerd op basis van herziening rollen en referentiecomponenten in het architectuurkader.

    • 0.0.5: Terminologie in YAML bijgewerkt.

    • 0.0.6: Gegevensdiensten van SIS API opgesplitst in:

      • Onderwijsorganisatie

      • Adresgegevens fijndistributie

      • Onderwijsaanbod

  • 0.0.2: De Education API is opgesteld op basis van een herziening van de SIS API. In deze herziening is aansluiting gezocht bij de best practices uit bestaande standaarden en een uiteenzetting van ontwerpeisen vanuit de flexibilisering van het onderwijs.

  • 0.0.3: De benamingen zijn gewijzigd naar StudyOffering en SubjectOffering.

  • 0.0.4: De volgende wijzigingen zijn gedaan:

    • Wijzigingen in de architectuur:

      • Attribuut schemaVersion is verwijderd uit de objecten.

      • Query parameter schemaVersion is verwijderd uit de koppelvlakken.

      • Query parameter edu_org_id is verwijderd uit de koppelvlakken waar consent voor nodig is toegevoegd aan alle endpoints als implementatie van regie op gegevens en de M2M identificatie en authenticatie.

      • Object Teacher is hernoemd naar Employee inclusief het attribuut role. In dezelfde lijn is ook teacherReference hernoemd naar employeeReference

      • De waardelijst studyYear is verduidelijkt.

      • Het attribuut class van de Student is een separaat object geworden inclusief employees.

      • De status- en foutcodes zijn toegevoegd aan de documentatie en de YAML.

      • In de YAML is aangegeven welke referentiecomponent de endpoints aanbiedt als Producer.

      • De YAML is geactualiseerd op basis van de bovenstaande wijzigingen.

      • Query parameters orgMasterId, orgId en orgIdType zijn toegevoegd om informatie over een onderwijsaanbieder op te vragen.

    • Wijzigingen in de documentatie en de YAML:

  • 0.0.5: Query parameter name toegevoegd aan GET organisations om zoeken van organisaties op naam mogelijk te maken.

  • 0.0.

    4: Objecten geactualiseerd op basis van herziening rollen en referentiecomponenten in het architectuurkader

    6: StudyAbbr attribuut verwijderd uit de StudyOffering object.

  • 0.0.

    5: Terminologie in YAML bijgewerkt

    7: studyCharacteristics attribuut van StudyOffering verandert in een array. Pattern voor studyCode verwijderd uit de YAML. De studyCode kan verschillende vormen hebben in RIO.

  • 0.0.

    6: Gegevensdiensten van SIS API opgesplitst in:
    • Onderwijsorganisatie

    • Adresgegevens fijndistributie

    • Onderwijsaanbod

    8: Het attribuut studyYears (array) is vervangen door het attribuut studyYear (enkele waarde). Een eerder wijzigingsvoorstel is ingetrokken en weer teruggebracht naar de eerdere versie.

  • 0.0.2: De Education API is opgesteld op basis van een herziening van de SIS API. In deze herziening is aansluiting gezocht bij de best practices uit bestaande standaarden en een uiteenzetting van ontwerpeisen vanuit de flexibilisering van het onderwijs9: Toelichting op opleidingsjaar (studyYear) aangepast in de tabel en in de YAML.

  • 0.9.0.3: De benamingen zijn gewijzigd naar StudyOffering en SubjectOffering: Het Bestuurlijk Overleg heeft tijdens de bijeenkomst van 27 juni 2024 het Afsprakenstelsel Edu-V als versie 0.9.0 goedgekeurd voor implementatie.

  • 0.09.4: De volgende wijzigingen zijn gedaan:

    • Wijzigingen in de architectuur:

      • Attribuut schemaVersion is verwijderd uit de objecten.

      • Query parameter schemaVersion is verwijderd uit de koppelvlakken.

      • Query parameter edu_org_id is verwijderd uit de koppelvlakken waar consent voor nodig is.

      • Query parameters orgMasterId, orgId en orgIdType zijn toegevoegd om informatie over een onderwijsaanbieder op te vragen.

    • Wijzigingen in de documentatie en de YAML:

  • 0.0.5: Query parameter name toegevoegd aan GET organisations om zoeken van organisaties op naam mogelijk te maken.

  • 0.0.6: StudyAbbr attribuut verwijderd uit de StudyOffering object.

  • 0.0.7: studyCharacteristics attribuut van StudyOffering verandert in een array. Pattern voor studyCode verwijderd uit de YAML. De studyCode kan verschillende vormen hebben in RIO.

  • 0.0.8: Het attribuut studyYears (array) is vervangen door het attribuut studyYear (enkele waarde). Een eerder wijzigingsvoorstel is ingetrokken en weer teruggebracht naar de eerdere versie.

  • 0.0.9: Toelichting op opleidingsjaar (studyYear) aangepast in de tabel en in de YAML1: Wijzigingen naar aanleiding van RFC’s:

    • Op basis van RFC002 is de scope aangepast met een prefix eduv.. Dit stelt leveranciers in staat om onderscheid te maken tussen gegevensuitwisselingen met leveranciers binnen en buiten het Edu-V afsprakenstelsel.

    • De parameters voor paginering zijn uit de koppelvlakspecificatie verwijderd. Binnen het afsprakenstelsel zijn de afspraken hierover beschreven op de pagina paginering, sorteren en rate limiting.

    • In de documentatie bij het attribuut studyYear van het object StudyOffering in de documentatie voor de volledigheid ook leerjaar 0 toegevoegd.

    • De Vestigingserkenning is als secundaire identifier voor een onderwijsaanbieder verwijderd uit de koppelvlakspecificatie.

  • 0.9.2: Wijziging naar aanleiding van RFC:

    • Op basis van RFC019 is in het StudyOffering object voor het attribuut studyCode de verwerkingsregel gewijzigd. Hierbij wordt de opleidingseenheidcode gehanteerd. en niet langer de erkendeopleidingscode. Op deze manier is de code uniek en persistent over sectoren heen.

    • Op basis van RFC019 zijn de voorbeelden in het StudyOffering object voor het attribuut studyCharacteristics verduidelijkt met karakteristieken die van toepassing kunnen zijn op een opleiding.