Students Prototype
Details en transactierollen voor deze API.
API
- Naam
- Students
- Versie
- v1.1.0
- Sector(en) P
- PO VO
- Status P
- Actief
Transactierollen P
Bron
Afnemer
Endpoints
Beschikbare endpoints voor deze API.
API-specificatie (YAML)
Volledige definitie uit het afsprakenstelsel.
openapi: 3.0.0
info:
title: Students API
version: '1.1.0'
description: |-
The Students API is implemented by the `Administratiesysteem onderwijsdeelnemer`.
Student data is split into the following objects with corresponding attributes:
- Basic data: identifiers and name
- Demographics: gender and dateOfBirth
- Communication: email
- Accessibility: language and accessibility preferences
- DeliveryAddress: home address and email addresses
Not all Student attributes are available to all consuming reference components. For example delivery address attributes are only available to the `Bestelomgeving leermiddelen`.
All objects have a different security scope which allows the `Administratiesysteem onderwijsdeelnemer` to share the attributes only with the reference components that are allowed to receive the attributes.
All consuming reference components require consent to request data from the Student API.
The Notifications API can be used by consuming reference components to receive notifications about new, modified, or deleted entities within the Students API.
The Students API has a scope of primary and secondary education. Vocational education is out of scope. For Vocational Education we advise 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: 1.1.0
Student:
title: Student
description: |
The Student object with its identifiers and name information.
Based on the scopes additional attributes can be included in this object.
### student.demographics
Demographic data of a Student:
- `dateOfBirth`
- `gender`
### student.communication
Communication data of the Student. For Students this is only the `e-mail` address as provided by the School.
### student.accessibility
`accessibility` and `language` preferences for the Student. StudentAccessibility is an optional object for the Students API.
- As an illustration the accessibility of AdditionalTestingTime is specified within this version.
- Based on actual requirements from schools and suppliers, this list of preferences can be extended.
- A possible next candidate might be the [Braille class](https://www.imsglobal.org/sites/default/files/spec/afa/3p0/information_model/imsafa3p0pnp_v1p0_InfoModel.html#Data_Braille).
### student.deliveryaddress
Delivery address data of a Student:
- `address`
- `emailPrivate`
- `emailsParents`
type: object
x-tags:
- Student
properties:
userMasterIdentifier:
type: string
description: |
The primary identifier for the Student.
For Students the ECK iD is used.
userIds:
type: array
description: |
A secondary identifier for a User. This value is used whenever the primary identifier is not available.
(either userMasterIdentifier or userIds is required)
items:
type: object
properties:
userId:
type: string
userIdType:
type: string
enum:
- NEPPI # nlPersonProfileId – value can be used for students and employees
- BPI # Basispoort ID – value can be used for students and employees
- eduID # eduID identifier – value can be used for students and employees
- NEPRI # nlPersonRealId – value can be used for students only
- ASI # Las-key – value can be used for students only
required:
- userId
- userIdType
givenName:
type: string
preferredFirstName:
type: string
familyName:
type: string
familyNamePrefix:
type: string
dateOfBirth:
type: string
format: date
description: 'format: YYYY-MM-DD (according to RFC3339)'
gender:
type: string
description: |
The gender of the Student. The following values are used:
- `female`: gender is Female
- `male`: gender is Male
- `other`: gender that is known but which is not either Male or Female.
- `unspecified`: unspecified as no data entry for this field has been made.
enum:
- female
- male
- other
- unspecified
email:
type: string
description: 'E-mail address hosted by school (e.g. L123456@school.nl).'
language:
type: string
description: |
The language preference of the Student. Format according to [ISO639 Set 3 values](https://www.iso.org/standard/74575.html) for Language tags.
On [Wikipedia](https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes) an example list can be found.
example: 'nld'
accessibility:
type: array
description: 'Accessibility preferences for this student. Based on [IMS Global Access for All (AfA) Personal Needs and Preferences (PNP) Information model](https://www.imsglobal.org/sites/default/files/spec/afa/3p0/information_model/imsafa3p0pnp_v1p0_InfoModel.html)'
items:
description: 'An IMS Global defined AfA or PNP preference.'
$ref: '#/components/schemas/AccessibilityPreference'
address:
type: object
description: 'The home address of the Student.'
properties:
street:
type: string
houseNumber:
type: integer
description: 'the house number'
houseNumberSuffix:
type: string
description: 'additions to the house number, e.g. A or -104'
zipCode:
type: string
city:
type: string
countryCode:
type: string
description: 'According to Alpha-2 code from ISO 3166, e.g. NL'
country:
type: string
required:
- street
- houseNumber
- zipCode
- city
- country
emailPrivate:
type: string
description: 'Private e-mail address of the student.'
emailsParents:
type: array
items:
type: string
description: 'E-mail address of a parent or the legal representative (e.g. guardian) of the Student.'
alias:
type: string
format: string
description: |
An additional field to distinct students on screen who carry the same name.
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: According to openapi in ZULU time as specified 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: According to openapi in ZULU time as specified in RFC 3339, section 5.6.'
format: date-time
example: "2022-08-11T15:31:12Z"
required:
- givenName
- familyName
- status
- dateCreated
- dateLastModified
AccessibilityPreference:
x-tags:
- StudentAccessibility
oneOf:
- $ref: '#/components/schemas/AdditionalTestingTime'
AdditionalTestingTime:
title: AdditionalTestingTime
description: 'The AdditionalTestingTime preference for a Student. Either `time-multiplier`, `fixed-minutes` or `unlimited` is used.'
type: object
x-tags:
- StudentAccessibility
properties:
additionalTestingTime:
type: object
properties:
time-multiplier:
type: number
description: 'Providing the additional testing time as a multiplier of the set time.'
example: 1.5
fixed-minutes:
type: integer
description: 'Providing the additional testing time as an additional number of minutes.'
example: 30
unlimited:
type: string
default: "" # The IMS Global specification prescribes an empty type.
description: 'Providing the additional testing time as an unlimited time.'
UserReference:
type: object
title: UserReference
properties:
userMasterIdentifier:
type: string
description: |
The primary identifier for a User.
For Students the ECK iD is used.
(either userMasterIdentifier or userIds is required)
userIds:
type: array
description: |
A secondary identifier for a User. This value is used whenever the primary identifier is not available.
(either userMasterIdentifier or userIds is required)
items:
type: object
properties:
userId:
type: string
userIdType:
type: string
enum:
- NEPPI # nlPersonProfileId – value can be used for students and employees
- BPI # Basispoort ID – value can be used for students and employees
- eduID # eduID identifier – value can be used for students and employees
- NEPRI # nlPersonRealId – value can be used for students only
- ASI # Las-key – value can be used for students only
- eckId # ECK iD – value can be used for employees only, eckId is userIdType for userMasterIdentifier for students
required:
- userId
- userIdType
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)
- 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.
- V_ID # VestigingsId – BRIN6-formaat identifier voor vestigingen, inclusief dummy vestigingen.
required:
- organisationId
- organisationIdType
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.student.basic: 'a scope that gives access to student identifiers and name.'
eduv.student.demographics: 'a scope that gives access to student demographics attributes.'
eduv.student.communication: 'a scope that gives access to student communication attributes.'
eduv.student.accessibility: 'a scope that gives access to student accessibility attributes.'
eduv.student.deliveryaddress: 'a scope that gives access to student delivery address attributes.'
paths:
/students:
post:
summary: Search Student
x-tags:
- Student
tags:
- Administratiesysteem onderwijsdeelnemer
operationId: search-student
description: 'Request a Student object for a specified Student at a School.'
requestBody:
content:
application/json:
schema:
type: object
properties:
school:
$ref: '#/components/schemas/SchoolReference'
student:
$ref: '#/components/schemas/UserReference'
required:
- school
- student
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Student'
'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.student.basic
- eduv.student.demographics
- eduv.student.communication
- eduv.student.accessibility
- eduv.student.deliveryaddress
/students/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
- BP_ID
- DD_ID
- AS_ID
- V_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.
The following values are supported:
- `OIE_CODE`: OnderwijsInstellingserkenningcode
- `BP_ID`: Basispoort-generated identifier for the school
- `DD_ID`: DigiDeliveryId generated by the Central Registration of Edu-iX
- `AS_ID`: LAS-generated identifier (LAS-Key) for the school
- `V_ID`: VestigingsId – BRIN6-format identifier, including dummy locations
- schema:
type: boolean
name: filterByOrgId
in: query
required: false
description: |
Controls whether the response is filtered to only include Students belonging to the
specific organisation identified by `orgId` and `orgIdType`, or whether all Students
of the associated Onderwijsaanbieder are returned.
- `true`: Only Students belonging to the specified secondary identifier are returned.
- `false`: All Students of the associated Onderwijsaanbieder are returned (to the extent authorisations have been configured).
When omitted, a sector-specific default applies:
- **PO (primary education):** defaults to `true` – response is filtered to the specified identifier.
- **VO (secondary education):** defaults to `false` – response covers the full Onderwijsaanbieder scope.
This parameter is only relevant in combination with `orgId` and `orgIdType`.
When `orgMasterId` is used, this parameter must be absent or `false`.
It is the responsibility of the consuming party to verify whether the Source supports
filtering via this parameter before using it.
- schema:
type: string
name: schoolPeriodId
in: query
required: false
description: 'Optional filter to request all Student objects enrolled in a specified SchoolPeriod and its corresponding schoolPeriodId.'
- schema:
type: string
name: studyOfferingId
in: query
required: false
description: 'Optional filter to request all Student objects enrolled in a StudyOffering and its corresponding studyOfferingId.'
- schema:
type: string
name: subjectOfferingId
in: query
required: false
description: 'Optional filter to request Student objects enrolled in a SubjectOffering and its corresponding subjectOfferingId.'
get:
summary: Get Students for School
x-tags:
- Student
tags:
- Administratiesysteem onderwijsdeelnemer
operationId: get-students-for-school
description: 'Request all Student objects including basic information (identifiers and names) for a specified school.'
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Student'
'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.student.basic
- eduv.student.demographics
- eduv.student.communication
- eduv.student.accessibility
- eduv.student.deliveryaddress
x-tags:
- name: Student
- name: StudentDemographics
- name: StudentCommunication
- name: StudentAccessibility
- name: StudentDeliveryAddress